c语言scanf函数循环 scanf在循环里只执行了一次

C语言scanf语句导致无法进入循环?问题已经解决,还是比较简单的 。。。一个小问题而已 。是scanf函数的问题 。
我先贴图好吧,我运行的结果 。
#include stdio.h
#include stdlib.h
#include string.h
#define SIZE 50
#define RAT 5
struct movie{
char name[SIZE];
int rating;
};
void * s_gets(char *,int n);
int main()
{
int i=0,j,k;
struct movie *mov;
printf("输入你想录入的影片数量\n");
scanf("%d",k);
mov=(struct movie *) malloc(k*sizeof(struct movie));
printf("输入你想录入的第一部影片名称\n");
while(iks_gets(mov[i].name,SIZE)!=NULLmov[i].name[0]!='\0')
{
printf("输入影片序号:");
scanf("%d",mov[i].rating);
while(getchar()!='\n')
continue;
puts("输入下一部影片名称:(empty line to stop):");
}//printf("%s\n",mov[0].name);
if(i==0)
printf("No data entered\n");
else
printf("Here is the movie list:\n");
for(j=0;ji;j)
{
printf("Movie: %s Rating: %d\n",mov[j].name,mov[j].rating);
}printf("Bye\n");
return 0;
}
void * s_gets(char *ch,int n)
{
char *ret_val;
char *find;
fflush(stdin); //getchar();可选 , 最好用fflush函数;
ret_val=fgets(ch,n,stdin);
if(ret_val)
{
find=strchr(ch,'\n');
if(find)
*find='\0';
else
while(getchar()!='\n')
continue;
}
【c语言scanf函数循环 scanf在循环里只执行了一次】return ret_val;
}
然后贴我的源码,就多了一行代码而已,在你的s_get函数里的fgets函数前面加了个fflush函数,位置,我已经加粗标明出来了 。。。问题也很简单,就是在第一个scanf函数的时候,你是按了回车的 , 所以第二次使用scanf的时候,fgets直接吃掉了回车,这是我们不需要的,所以在这个之前,我们必须先把stdin输入流里的回车,清理掉,使用fflush函数一次清理了stdin输入流,等stdin输入流干净了之后,再调用fgets就不会出错了,当然也可以使用getchar函数把回车吃掉,不过比较麻烦 , 我一般喜欢用fflush函数,反正输入前,那些脏东西,我们不关心,也不需要,而且万一有多个呢,getchar只能清理一个脏东西,而fflush函数,直接全部冲掉,来的简单方便 。。。。
问题解决,请采纳!不懂再问 。
C语言scanf()问题 。为什么我输入非数字,比如字母之类的会死循环???scanf叫做“格式化输入”函数,这个函数是“脆弱型”的输入处理,在遇到非法输入的时候,只会跳过,不会清理输入缓冲区,造成了你在while中这样做就是死循环,因为缓冲区一直有“已经输入的并且未清除的内容” 。
解决办法很简单,在printf语句之前,清理一下缓冲区即可:
flushall();
printf(......);
C语言中 scanf()与循环问题使用while的时候尽量不要使用组合条件,而应该采用这种形式:
while (1) {
if (条件1) break;
//...
if (条件2) continue;
//...
if (条件3) return;
//...
}
所以可以将你的改为:
while(1)
{
scanf("%c",u);
if(u=='p')
{
break;
}
else
{
case ...... //补充
}
}
C语言里面的scanf函数在循环里面的用法不需要,如果你用逗号隔开的话,输入数据时就要输入逗号 。
比如scanf("%d%d",
a,
b);输入时直接输入a的值,回车 , 然后输入b的值,回车 。
如果是scanf("%d,%d",
a,
b);输入的时候就要输入a的值 , 然后输入个逗号,再输入b的值回车 。
关于c语言scanf函数循环和scanf在循环里只执行了一次的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读