scanf在被要求从用户处输入之前接受输入的模糊性? #包括 void main(){ int num1,num2; printf(“\n输入数字1\t”);//要求输入一个。>>>>>>第1行。 scanf(“%d”&num1); printf(“\n输入的数字是%d\n”,num1); printf(“\n输入数字2\t”);//要求输入2。>>>>>>第2行。 scanf(“%d”&num2); printf(“\n输入的数字是%d\n”,num2); 回来 }
我想知道原因。请提供 上面的代码接受两个输入,第一个输入被请求(通过执行第1行),然后用户输入一个数字,然后终端应该请求输入第二个输入,但它接受另一个数字(在执行第2行之前),然后请求输入第二个输入(即在执行第2行之后) 最后是显示在执行第二行之前,但在执行第1行之后的两个输入 我很困惑,我想知道原因。scanf在被要求从用户处输入之前接受输入的模糊性? #包括 void main(){ int num1,num2; printf(“\n输入数字1\t”);//要求输入一个。>>>>>>第1行。 scanf(“%d”&num1); printf(“\n输入的数字是%d\n”,num1); printf(“\n输入数字2\t”);//要求输入2。>>>>>>第2行。 scanf(“%d”&num2); printf(“\n输入的数字是%d\n”,num2); 回来 },c,gcc,printf,scanf,C,Gcc,Printf,Scanf,我想知道原因。请提供 上面的代码接受两个输入,第一个输入被请求(通过执行第1行),然后用户输入一个数字,然后终端应该请求输入第二个输入,但它接受另一个数字(在执行第2行之前),然后请求输入第二个输入(即在执行第2行之后) 最后是显示在执行第二行之前,但在执行第1行之后的两个输入 我很困惑,我想知道原因。 我在ubuntu 14.04 64位机器上使用的是GCC4.8.2。删除访问说明符的scanf之间的空格 #include<stdio.h> void main(){ in
我在ubuntu 14.04 64位机器上使用的是GCC4.8.2。删除访问说明符的scanf之间的空格
#include<stdio.h>
void main(){
int num1,num2;
printf("\n Enter number 1 \t "); // Ask for input one. >>>>>>>> line 1.
scanf("%d ",&num1);
printf("\n Entered number is %d \n",num1);
printf("\n Enter number 2 \t "); // Ask for input Two. >>>>>>>>> line 2.
scanf("%d ",&num2);
printf("\n Entered number is %d \n",num2);
return;
}
到
因为scanf会因为这个空格而得到另一个值
并保存在缓冲区内。在内存获得后,将其分配
它适用于所有scanf功能
如果我喜欢
scanf("%d",&num1);
你需要把
Enter Number1 1
2
Entered number is 1
Enter number2 3
Entered number is 2.
在scanf
这将刷新您的缓冲区
(检查scanf的返回值也是个好主意)
- 最好使用
int main()
并在最后写入返回0代码>
- 使用
fflush(stdout)
刷新缓冲区李>
编辑后,这里是最终代码
fflush(stdout);
#包括
int main(){
int num1,num2;
printf(“\n输入数字1\t”);//要求输入一个。>>>>>>第1行。
scanf(“%d”&num1);
printf(“\n输入的数字是%d\n”,num1);
printf(“\n输入数字2\t”);//要求输入2。>>>>>>第2行。
fflush(stdout);
scanf(“%d”&num2);
printf(“\n输入的数字是%d\n”,num2);
返回0;
}
这是您在scanf中为%d指定的空间。如果在%d之后删除该空间,程序将运行让我们慢慢地将其拆下
#include<stdio.h>
int main(){
int num1,num2;
printf("\n Enter number 1 \t "); // Ask for input one. >>>>>>>> line 1.
scanf("%d ",&num1);
printf("\n Entered number is %d \n",num1);
printf("\n Enter number 2 \t "); // Ask for input Two. >>>>>>>>> line 2.
fflush(stdout);
scanf("%d ",&num2);
printf("\n Entered number is %d \n",num2);
return 0;
}
它工作得很好。你看过(你应该测试它的结果)和(你可能需要在适当的地方打电话)的文件了吗?可能是重复的,先生,我能知道原因吗?谢谢,删除空格后它会工作。@adambure21,请阅读haccks建议的链接,先生,我想知道原因。-或者在刷新之前,这些东西就在内存中。或者阅读scanf的手册页面,了解returnNo的值,如果这是原因,则输出顺序不会改变。
#include<stdio.h>
int main(){
int num1,num2;
printf("\n Enter number 1 \t "); // Ask for input one. >>>>>>>> line 1.
scanf("%d ",&num1);
printf("\n Entered number is %d \n",num1);
printf("\n Enter number 2 \t "); // Ask for input Two. >>>>>>>>> line 2.
fflush(stdout);
scanf("%d ",&num2);
printf("\n Entered number is %d \n",num2);
return 0;
}
#include <stdio.h>
// void main(){
int main(void) {
int num1, num2;
printf("\n Enter number 1 \t ");
scanf("%d ",&num1);
printf("\n Entered number is %d \n",num1);
...
printf("\n Enter number 1 \t ");
char buf[100];
fgets(buf, sizeof buf, stdin);
if (sscanf(buf, "%d", &num1) != 1) Handle_BadInput();
else printf("\n Entered number is %d \n",num1);