while(1)
{
printf("please input a student:Y/N\n");
scanf("%c",&s);
if(s=='n'||s=='N')
break;
printf("please your name:");
scanf("%s",name);
strcpy(stu[i].name,name);
printf("please your age;");
scanf("%d",&stu[i].age);
printf("please your sex:");
scanf("%d",&stu[i].sex);
i++;
}
还有其他代码没附上,但整个程序可以运行,第一次循环正常,但第二次以后好像不会进行s==n的判断,直接又到输入名字了,不能正常break退出,,且如果把sex的类型换成char好像也不会有sex的scanf的输入,,,,,为什么阿
此程序取之l《inux系统下c程序开发详解》完全手册,,


quxin3r 于 2009-04-07 17:51:55发表:
看看。。。
brucezuo 于 2009-03-31 21:55:50发表:
看这里回答问题的都是师长以上级别,呵呵。
heiyie 于 2009-03-31 19:29:46发表:
非常感谢阿,今天又遇到了同样的问题,终于明白了
ShinyGuo 于 2009-03-22 11:04:09发表:
建议把scanf("%c", &s);改为
while((s=getchar())=='\n') ; 以去除输入的回车符。你试试,应该可以的。
deepwhite 于 2009-03-19 22:14:23发表:
我在我这里试了一下是可以的。但是其实用%s不是一个好方法,有点危险。
heiyie 于 2009-03-19 11:20:04发表:
谢了,可以用EOF,但前面的是把s改成字符串么,好像还不行阿,结果如下,,
please input a student:Y/N
y
please your name:z
please your age;23
please your sex:1
please input a student:Y/N
please your name:s
please your age;22
please your sex:2
please input a student:Y/N
please your name:
deepwhite 于 2009-03-18 18:09:45发表:
[i=s] 本帖最后由 deepwhite 于 2009-3-18 18:32 编辑 [/i]
执行这个程序的时候你直接回车试试?也会继续执行。程序在执行scanf将回车这个按键按下时候发出的信号也进行了记录,而不是将其作为了输入的结束标志,且将回车符在缓冲区中存放起来(这样讲应该不是很准确,但是暂时没有想到更好的说法)。
最简单的解决办法是将scanf("%c", &s)改成scanf("%s", &s),这样就可以了。
还有一个就是不改动程序,但输入完Y或者N后不要回车,而是向程序发送EOF(Linux下为Ctrl+D),这样程序也可以正常运行。
据说也快车通过加入fflush()来刷新缓冲来实现,我没有试过。