使用scanf()检查C中的用户输入
目的: 如果用户输入的使用scanf()检查C中的用户输入,c,if-statement,input,C,If Statement,Input,目的: 如果用户输入的b是一个float数字打印floor(b)、round(b)、ceil(b) Else打印扫描错误:(%d)\n 这个指令(由我们的老师提供)有这样一个代码,我不明白 这是我的密码: ` #包括 #包括 内部主(空){ 浮球b; printf(“输入浮点数”); int a=0; a=5; a=扫描频率(“%d”和&b); 如果(a=0) { printf(“扫描错误:(%d)\n”,a); } 其他的 { printf(“%g%g%g”,地板(b),圆形(b),天花板(b
b
是一个float
数字打印floor(b)、round(b)、ceil(b)
Else打印扫描错误:(%d)\n
这个指令(由我们的老师提供)有这样一个代码,我不明白
这是我的密码:
`
#包括
#包括
内部主(空){
浮球b;
printf(“输入浮点数”);
int a=0;
a=5;
a=扫描频率(“%d”和&b);
如果(a=0)
{
printf(“扫描错误:(%d)\n”,a);
}
其他的
{
printf(“%g%g%g”,地板(b),圆形(b),天花板(b));
}
返回0
}
错误#1
if (a=0) // condition will be always FALSE
一定是
if (a==0)
或者更好
if (0 == a)
错误#2
scanf("%d", &b); // when b is float
而不是
scanf("%f", &b);
更新:
实际上,为了检查scanf
的结果,我个人更喜欢使用=代码>带有最后一次scanf
输入的值数。例如,如果继续计算所需的两个逗号分隔的整数可以是:
int x, y;
int check;
do{
printf("Enter x,y:");
check = scanf("%d,%d", &x, &y); // enter format is x,y
while(getchar()!='\n'); // clean the input buffer
}while(check != 2);
如果check
不是2
,即0
(即使第一个值不正确,例如abc,12
)或1
(当用户忘记逗号或在逗号后不输入数字,例如12,y
错误
if (a=0) // condition will be always FALSE
一定是
if (a==0)
或者更好
if (0 == a)
错误#2
scanf("%d", &b); // when b is float
而不是
scanf("%f", &b);
更新:
实际上,对于检查scanf
结果的情况,我个人更喜欢使用!=
和最后一个scanf
输入的值的数量。例如,如果继续计算需要两个逗号分隔的整数,则代码段可以是:
int x, y;
int check;
do{
printf("Enter x,y:");
check = scanf("%d,%d", &x, &y); // enter format is x,y
while(getchar()!='\n'); // clean the input buffer
}while(check != 2);
如果check
不是2
,即0
(即使第一个值不正确,例如abc,12
)或1
,则该循环将重新请求输入(当用户忘记逗号或在逗号后不输入数字时,例如,12,y
带有更正和注释的代码-也可在此处获得-
#包括
#包括
内部主(空){
浮球b;
//printf(“输入浮点数”);
printf(“输入一个浮点数”);//纠正了打字错误
fflush(stdout);//将缓冲区发送到控制台,以便用户可以看到它
int a=0;
//a=5;--不需要
a=scanf(“%f”,&b);//有关读取浮动的信息,请参阅手册页
if(a==0)//需要比较运算符not assignemnt
{
printf(“scanf错误:(%d)\n”,a);//此处可以放置更好的错误消息
}
其他的
{
printf(“%g\n”,b);//只需使用ideone检查输入-调试
printf(“%g%g%g”,地板(b),圆形(b),天花板(b));
}
返回0;//此处需要分号
}
为了VenuKant Sahu的利益
返回值
这些函数返回成功匹配的输入项目数
和分配的,可以少于提供的数量,甚至可以为零
早期匹配失败的事件
如果在以下任一时间之前到达输入结束,则返回值EOF
发生第一次成功转换或匹配失败。EOF为
如果发生读取错误,也会返回,在这种情况下,错误
设置流的指示器(见ferror(3)),并设置errno
指出错误
带更正和注释的代码-也可在此处获得-
#包括
#包括
内部主(空){
浮球b;
//printf(“输入浮点数”);
printf(“输入一个浮点数”);//纠正了打字错误
fflush(stdout);//将缓冲区发送到控制台,以便用户可以看到它
int a=0;
//a=5;--不需要
a=scanf(“%f”,&b);//有关读取浮动的信息,请参阅手册页
if(a==0)//需要比较运算符not assignemnt
{
printf(“scanf错误:(%d)\n”,a);//此处可以放置更好的错误消息
}
其他的
{
printf(“%g\n”,b);//只需使用ideone检查输入-调试
printf(“%g%g%g”,地板(b),圆形(b),天花板(b));
}
返回0;//此处需要分号
}
为了VenuKant Sahu的利益
返回值
这些函数返回成功匹配的输入项目数
和分配的,可以少于提供的数量,甚至可以为零
早期匹配失败的事件
如果在以下任一时间之前到达输入结束,则返回值EOF
发生第一次成功转换或匹配失败。EOF为
如果发生读取错误,也会返回,在这种情况下,错误
设置流的指示器(见ferror(3)),并设置errno
指出错误
也许阅读这篇文章会有所帮助-你不能用“%d”来表示浮点。@EdHeal:也可以用-Wall
(或等效的,取决于编译器)。GCC-Wall
会同时出现a=0
和%d
错误。这条指令(由我们的老师提供)有这样的代码,我不理解。”-->询问老师。否则您就没有“老师”。另外,请纠正Enter
的拼写。阅读此内容可能会有所帮助-您不能将“%d”用作浮点。@EdHeal:也可以使用-Wall
编译(或等效工具,取决于编译器).GCC-Wall
会同时发现a=0
和%d
错误。“指令(由我们的老师提供)有这样一个代码,我不明白。”——>问老师。否则你就没有“老师”。另外,请纠正Enter
Yoda的拼写不好(现代编译器可能会发现这个问题)@EdHeal你已经证明了他的老师在标准的基础上是愚蠢的,但他不是因为他使用编译器而不只是阅读那些标准。为什么0==a
比a==0
好?0==a
比a==0
好,因为编译器在编译时发现错误0=a
,但认为a=0