C语言问题 用int 定义变量,输入的值能为字符吗?
#include<stdio.h>voidcritic(int*u);intmain(void){intunits;printf("Howmanypoundstoafir...
#include <stdio.h>
void critic(int * u);
int main(void)
{
int units;
printf("How many pounds to a firkin of butter?\n");
scanf("%d", &units);
while ( units != 56)
critic(&units);
printf("You must have looked it up!\n");
return 0;
}
void critic(int * u)
{
printf("No luck, chummy. Try again.\n");
scanf("%d", u);
}
要求输入数字,当输入的值为56时停止,可是如果输入的为字母就无限循环而不是让你重新输入,这是为什么呢? 展开
void critic(int * u);
int main(void)
{
int units;
printf("How many pounds to a firkin of butter?\n");
scanf("%d", &units);
while ( units != 56)
critic(&units);
printf("You must have looked it up!\n");
return 0;
}
void critic(int * u)
{
printf("No luck, chummy. Try again.\n");
scanf("%d", u);
}
要求输入数字,当输入的值为56时停止,可是如果输入的为字母就无限循环而不是让你重新输入,这是为什么呢? 展开
3个回答
展开全部
C语言中, 用int 定义变量,采用scanf("%d")函数进行数据输入时,如果按下了非数字键,则scanf()函数会返回错误。
scanf()函数说明:
SYNOPSIS
#include <stdio.h>
int scanf(const char *format, ...);
RETURN VALUE
The function return the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero in the event of an early matching failure.本函数返回成功匹配并赋值的输入项个数,有可能少于参数个数,当第一项匹配就不成功时,会直接返回0
如:
#include <stdio.h>
int main()
{
int x,y,z;
z=scanf("%d %d", &x,&y );
printf("z=%d\n", z);
return 0;
}
运行结果:
input : a
z=0
input : 1 a
z=1
input : 1 2
z=2
PS:如果scanf("%d")语句在循环语句中,当错按了字符后,scanf()返回出错,准备继续读一个正确的数时,因为,字符在缓存中没有清理,所以,一直会读出错,造成死循环。因此,最好是在scanf("%d")之后加一个getchar()命令,去吸收这个错误的字符,避免死循环。(正常的读入整数,一定也会以空格或回车来结束整数的输入,所以,getchar()在这里不会影响到程序的正常运行)
展开全部
因为你用%d格式读取,这种格式默认是int型数据
由于你输入一个数字,系统会按照这个格式从缓冲区中读取掉这个数据
但是如果你输入的字符,系统就会读取失败,这个字符还是留在缓冲区中
然后系统接着读,还是读取失败,这个字符永远留在缓冲区中,系统就永远的读不完
由于你输入一个数字,系统会按照这个格式从缓冲区中读取掉这个数据
但是如果你输入的字符,系统就会读取失败,这个字符还是留在缓冲区中
然后系统接着读,还是读取失败,这个字符永远留在缓冲区中,系统就永远的读不完
更多追问追答
追问
那要怎么改?新手求教
追答
你程序不是对的么,我只是针对你的问题做了一个解释
你的程序并没有错呀
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不行,编译器肯定要报错,如果需要可以使用(float)强制转换int型
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询