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); 回来 }

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

我想知道原因。请提供

上面的代码接受两个输入,第一个输入被请求(通过执行第1行),然后用户输入一个数字,然后终端应该请求输入第二个输入,但它接受另一个数字(在执行第2行之前),然后请求输入第二个输入(即在执行第2行之后)

最后是显示在执行第二行之前,但在执行第1行之后的两个输入

我很困惑,我想知道原因。
我在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);