免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1910 | 回复: 9
打印 上一主题 下一主题

[Linux] 为什么输出结果是这个?……………… [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-18 11:41 |只看该作者 |倒序浏览
#include <stdio.h>
#include <stdlib.h>                                /*因为要用strcpy函数,所以要包含头文件stdlib.h。*/

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

void main()
{
  struct student stu[50];                                        /*定义一个结构体,表示有50个学生。*/
  int i=0;                                                                        /*输入学生的计数。*/
  int j ;                                                                        /*输出的计数。*/
  char s;                                                                        /*用户输入数据。*/
  char name[20];                                                        /*姓名。*/
  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[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);                                                /*输入姓名到name字符串。*/
                            /*将字符串复制到学生姓名上。*/
     i++;                                                                        /*计数器自加。*/
  }

  for(j=0;j<i;j++)                                                        /*for循环输出。*/
  {
    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);        /*输出身高。*/
  }
}
就是输入时:问什么输完一个学生的信息后“printf("error.\n");”都执行了一次?       

论坛徽章:
0
2 [报告]
发表于 2013-03-18 14:00 |只看该作者
你的问题,这篇文章应该可以解决:http://blog.csdn.net/xuefu2008/article/details/4645049

论坛徽章:
0
3 [报告]
发表于 2013-03-18 22:22 |只看该作者
自己顶起,谁能给我个准确的说法啊,谢谢啦,上面的那个文章看了,感觉不是那个问题

论坛徽章:
0
4 [报告]
发表于 2013-03-18 22:40 |只看该作者
楼主你的判断条件if(s!='n'&&s!='N'&&s!='y'&&s!='Y') 有问题,应该是||不是&&

论坛徽章:
0
5 [报告]
发表于 2013-03-19 00:11 |只看该作者
回复 3# lihui19891118

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

论坛徽章:
0
6 [报告]
发表于 2013-03-19 12:44 |只看该作者
回复 4# dxwno1


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

论坛徽章:
0
7 [报告]
发表于 2013-03-19 12:44 |只看该作者
回复 4# dxwno1


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

论坛徽章:
0
8 [报告]
发表于 2013-03-19 12:52 |只看该作者
回复 5# txgc_wm


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

论坛徽章:
0
9 [报告]
发表于 2013-03-19 16:36 |只看该作者
scanf("%s",&stu[i].name);            
这句stu前边不应该添加&符号了吧  结构体里你的name已经是一个字符串了,name就是地址,你再加&不就是指针的指针了么                                   

论坛徽章:
0
10 [报告]
发表于 2013-03-19 23:40 |只看该作者
代码
  1. i++;
复制代码
之后,添加如下语句
  1. setbuf(stdin, NULL);  //setbuf用于linux,windows 用fflush(stdin);
复制代码
就是buf缓存的问题,具体的解释参考之前发给你的链接。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP