当前位置: 代码迷 >> C语言 >> 今天遇到的问题
  详细解决方案

今天遇到的问题

热度:101   发布时间:2006-08-01 13:25:25.0
今天遇到的问题

#include<stdio.h>
int main(void)
{
int n;
char q;
scanf("%d",&n);
printf("hello!\n");
scanf("%c",&q);
printf("%d\n%c",n,q);
getchar();
getchar();
getchar();
return 0;
}


用DEV编译器编译运行后,首先输入任意一个字符,然后会显示2与Q,问这个2是怎么得来的.而且一开始输入正确的整数的话,后面的字符输入也有问题,怎么回事?这涉及到什么问题?与缓冲区有关吗?请高手讨论下


[此贴子已经被作者于2006-8-1 13:26:47编辑过]


----------------解决方案--------------------------------------------------------
以下是引用zz578在2006-8-1 13:25:25的发言:

#include<stdio.h>
int main(void)
{
int n;
char q;

scanf("%d",&n);
fflush(stdin);

printf("hello!\n");
scanf("%c",&q);  
printf("%d\n%c",n,q);
return 0;
}


用DEV编译器编译运行后,首先输入任意一个字符,然后会显示2与Q,问这个2是怎么得来的.而且一开始输入正确的整数的话,后面的字符输入也有问题,怎么回事?这涉及到什么问题?与缓冲区有关吗?请高手讨论下

一开始,如果先输入字符,然后按下回车,scanf没有成功读入数值赋给n,此时,n为随机数.显示2就是随机数.
字符和回车保留在缓冲区,被scanf("%c",&q);读入了字符,从而把字符赋给了q.
如果一开始,先输入数字,按下回车后,数字被scanf("%d",&n);成功读入,而回车仍保留在缓冲区,直接被scanf("%c",&q);读入,所以字符输入当然也有问题。


----------------解决方案--------------------------------------------------------
多谢斑竹!
----------------解决方案--------------------------------------------------------
但为什么随机数总是2?
----------------解决方案--------------------------------------------------------
这个应该和rand()产生的随机值是固定的原因是相同的吧。

----------------解决方案--------------------------------------------------------
rand()是什么?
----------------解决方案--------------------------------------------------------
是不是random?

----------------解决方案--------------------------------------------------------
  相关解决方案