【发布时间】:2021-05-22 04:39:09
【问题描述】:
这里如果在扫描函数中使用了两个格式说明符,但它只在取三个数字后才继续,尽管只存储了两个数字。我不知道为什么它在等待不必要的第三个数字。
#include <stdio.h>
int main(){
int a ,b ;
printf("Enter values of a and b ");
scanf(" %d %d " , &a ,&b );
printf("a = %d b = %d" ,a ,b);
return 0;
}
【问题讨论】:
-
没有明显的原因你有问题,虽然
if (scanf ("%d %d", &a ,&b) != 2) { fputs ("error: invalid integer input.\n", stderr); return 1; }添加验证并从格式字符串中删除不必要的空间。会更好。 -
很确定尾随空格的意思是“使用空格直到遇到非空格,然后才返回”
-
顺便说一句:一般来说,如果您使用
getline后跟sscanf,您会发现事情会容易得多。这样,您就可以更好地控制用户按下回车键时发生的情况。 -
或者至少
fgets()带有足够大小的缓冲区(字符数组),然后sscanf()使用缓冲区作为第一个参数。 (fgets()而不是getline()消除了必须free()分配的缓冲区)fgets()或getline()的唯一缺点是必须在同一行输入两个 值。使用scanf(),它们可以用任意数量的空行分隔。 -
把
scanf(" %d %d " , &a ,&b );改成scanf("%d %d", &a ,&b );