红联Linux门户
Linux帮助

c编程问题

发布时间:2009-03-18 12:57:20来源:红联作者:heiyie
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程序开发详解》完全手册,,
文章评论

共有 7 条评论

  1. quxin3r 于 2009-04-07 17:51:55发表:

    看看。。。

  2. brucezuo 于 2009-03-31 21:55:50发表:

    看这里回答问题的都是师长以上级别,呵呵。

  3. heiyie 于 2009-03-31 19:29:46发表:

    非常感谢阿,今天又遇到了同样的问题,终于明白了

  4. ShinyGuo 于 2009-03-22 11:04:09发表:

    建议把scanf("%c", &s);改为
    while((s=getchar())=='\n') ; 以去除输入的回车符。你试试,应该可以的。

  5. deepwhite 于 2009-03-19 22:14:23发表:

    我在我这里试了一下是可以的。但是其实用%s不是一个好方法,有点危险。

  6. 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:

  7. 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()来刷新缓冲来实现,我没有试过。