lihui19891118 发表于 2013-03-18 11:41

为什么输出结果是这个?………………

#include <stdio.h>
#include <stdlib.h>                                /*因为要用strcpy函数,所以要包含头文件stdlib.h。*/

struct student                                        /*定义一个结构体。*/
{
   char name;                                /*姓名。*/
   int age;                                                /*年龄。*/
   int sex;                                                /*性别。*/
   int height;                                                                /*身高。 */
};

void main()
{
struct student stu;                                        /*定义一个结构体,表示有50个学生。*/
int i=0;                                                                        /*输入学生的计数。*/
int j ;                                                                        /*输出的计数。*/
char s;                                                                        /*用户输入数据。*/
char name;                                                        /*姓名。*/
while(1)                                                                        /*进入一个while循环。*/
{
   printf("input a student?\n?Y/N:");                /*提示用户输入选择。*/
   scanf("%c",&s);                                                        /*用户输入一个字符。*/

   if(s=='N'||s=='n')                                                /*输入N或n则中断循环。*/
   {
      break;                                                                /*中止当前循环。*/
   }

   if(s!='n'&&s!='N'&&s!='y'&&s!='Y')                /*如果不是N、n、Y、y这几个字母则进入下次循环。*/
   {
      printf("error.\n");                                        /*输出提示。*/
      continue;                                                        /*进入下一次循环。*/
   }

   printf("please input age:\n");                        /*提示输入年龄。*/
   scanf("%d",&stu.age);                                /*输入年龄。*/
   printf("please input height:\n");                /*提示身高。*/
   scanf("%d",&stu.height);                        /*输入身高。*/
   printf("please input sex:\n");                        /*提示性别。*/
   scanf("%d",&stu.sex);                                /*输入性别。*/
   printf("please input name:\n");                /*提示姓名。*/
   scanf("%s",&stu.name);                                                /*输入姓名到name字符串。*/
                            /*将字符串复制到学生姓名上。*/
   i++;                                                                        /*计数器自加。*/
}

for(j=0;j<i;j++)                                                        /*for循环输出。*/
{
    printf("Student[%d]\n",j);                                /*提示第几个学生。*/
    printf("Name:%s\n",stu.name);        /*输出姓名。*/
    printf("Age   :%d\n",stu.age);        /*输出年龄。*/
    printf("Sex   :%d\n",stu.sex);        /*输出性别。*/
    printf("Height:%d\n",stu.height);        /*输出身高。*/
}
}
就是输入时:问什么输完一个学生的信息后“printf("error.\n");”都执行了一次?       

txgc_wm 发表于 2013-03-18 14:00

你的问题,这篇文章应该可以解决:http://blog.csdn.net/xuefu2008/article/details/4645049

lihui19891118 发表于 2013-03-18 22:22

自己顶起,谁能给我个准确的说法啊,谢谢啦,上面的那个文章看了,感觉不是那个问题

dxwno1 发表于 2013-03-18 22:40

楼主你的判断条件if(s!='n'&&s!='N'&&s!='y'&&s!='Y') 有问题,应该是||不是&&

txgc_wm 发表于 2013-03-19 00:11

回复 3# lihui19891118

楼主,你是没仔细看。输入完名字后,你多弄几个空格看现象,就知道那文章是不是有提到你的问题了。

lihui19891118 发表于 2013-03-19 12:44

回复 4# dxwno1


    你好好的再看看C语言方面的逻辑判断语句吧,很高兴为我解答,

lihui19891118 发表于 2013-03-19 12:44

回复 4# dxwno1


    你好好的再看看C语言方面的逻辑判断语句吧,很高兴为我解答,

lihui19891118 发表于 2013-03-19 12:52

回复 5# txgc_wm


    我又运行了几次发现那个printf("error");语句都比我输入的空格数目多执行一次,那边文章也看了大部分,有些不懂,你能帮我分析下到底是怎么回事吗,谢谢啦

Tonny_ren 发表于 2013-03-19 16:36

scanf("%s",&stu.name);            
这句stu前边不应该添加&符号了吧结构体里你的name已经是一个字符串了,name就是地址,你再加&不就是指针的指针了么                                 

txgc_wm 发表于 2013-03-19 23:40

代码i++;之后,添加如下语句setbuf(stdin, NULL);//setbuf用于linux,windows 用fflush(stdin);就是buf缓存的问题,具体的解释参考之前发给你的链接。
页: [1]
查看完整版本: 为什么输出结果是这个?………………