BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #41881同步于 2010/7/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

麻烦帮看个程序,谢谢

JacKie575
2010/7/28镜像同步8 回复
#include <stdio.h> #include <string.h> struct student /*定义一个结构体。*/ { char name[20]; /*姓名。*/ int age; /*年龄。*/ int sex; /*性别。*/ int height; /*身高。 */ }; main() { /*定义一个结构体,表示有 50 个学生。*/ struct student stu[50]; int i=0; /*输入学生的计数。*/ int j; /*输出的计数。*/ char s; /*用户输入数据。*/ char name[20]; /*姓名。*/ /*进入一个 while 循环。*/ while(1) { printf("input a student?\nY/N:"); /*提示用户输入选择。*/ scanf("%c",&s); /*用户输入一个字符。*/ /*输入 N 或 n 则中断循环。*/ if(s=='N'||s=='n') { break; /*中止当前循环。*/ } /*如果不是 N、n、Y、y 这几个字母则进入下次循环。*/ if(s!='y'&&s!='Y') { printf("error.\n"); /*输出提示。*/ continue; /*进入下一次循环。*/ } printf("please input age:\n"); /*提示输入年龄。*/ scanf("%d",&stu[i].age); /*输入年龄。*/ printf("please input height:\n"); /*提示身高。*/ scanf("%d",&stu[i].height); /*输入身高。*/ printf("please input sex:\n"); /*提示性别。*/ scanf("%d",&stu[i].sex); /*输入性别。*/ printf("please input name:\n"); /*提示姓名。*/ scanf("%s",stu[i].name); i++; /*将字符串复制到学生姓名上。*/ /*计数器自加。*/ } for(j=0;j<i;j++) { printf("Student[%d]\n",j); /*提示第几个学生。*/ printf(" Name :%s \n",stu[j].name); /*输出姓名。*/ printf(" Age :%d \n",stu[j].age); /*输出年龄。*/ printf(" Sex :%d \n",stu[j].sex); /*输出性别。*/ printf(" Height:%d \n",stu[j].height); /*输出身高。*/ } } 编译以后执行结果如图 就是每次输入一个学生后总会多出一段提示 "input a student? Y/N:error. input a student? Y/N:" 而第一段的"input a student? Y/N:error."很明显是多余的,但是思路上我又无法解决怎么修正,麻烦各位帮看看,谢谢!
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
shenlei机器人#1 · 2010/7/28
do{ }while()
monarch机器人#2 · 2010/7/28
在while的最后加一句 setbuf(stdin, NULL); 不过,为什么你用死循环
rainblue机器人#3 · 2010/7/28
fflush(stdin);
ericyosho机器人#4 · 2010/7/28
在每一个scanf的字符串里面,加上空格 scanf(" %c") scanf(" %d")
wks机器人#5 · 2010/7/28
慎用%c,可能会把空格、换行符读进来。而且你也许注意到了换行符在Windows里是2个字节,在Linux里是1个字节。所以预读一个%c试图把换行符读掉,也不总能正常工作。 建议:哪怕是读一个字符,也开一个足够长的缓冲区,用%s读。 char buf[256]; printf("Input a student?"); scanf("%256s",buf); if(strcmp(buf,"y")==0) { ... }
FadeToBlack机器人#6 · 2010/7/28
eric卡带了…… 【 在 ericyosho (ericyosho) 的大作中提到: 】 : 在每一个scanf的字符串里面,加上空格 : scanf(" %c") : scanf(" %d") : ...................
ericyosho机器人#7 · 2010/7/28
在宿舍,蹭学校的无线,果然容易卡带……
JacKie575机器人#8 · 2010/7/28
非常谢谢楼上几位的解答,好像确实是%C的预读造成。 to2楼:其实不是死循环的,你注意到中间有个break;实际上输入'n'/'N'都会中断循环。