LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 599|回复: 3

运行后不循环了

[复制链接]
发表于 2005-3-18 10:48:07 | 显示全部楼层 |阅读模式

  1. #include <stdio.h>

  2. void LoadArrays(void);
  3. void PrnArrays(void);

  4. char    sName[5][21];
  5. int     iProd[5];

  6. int
  7. main(void)
  8. {
  9.     LoadArrays();
  10.     PrnArrays();
  11. //    getchar();
  12. }

  13. void
  14. LoadArrays(void)
  15. {
  16.     int iSub;
  17.     for (iSub = 0; iSub < 5; iSub++)
  18.     {
  19.         printf("Enter employee name %d:", iSub+1);
  20.         scanf("%20[^\n]", sName[iSub]);
  21.         fflush(stdin);
  22.         printf("Enter production %d:", iSub+1);
  23.         scanf("%d\n", &iProd[iSub]);
  24.        printf("%d", iSub);
  25.         fflush(stdin);
  26.       
  27.     }
  28.     return;
  29. }

  30. void
  31. PrnArrays(void)
  32. {
  33.     int iSub;
  34.    
  35.     printf("\nEMPLOYEE NAME        PRODUCTION");
  36.     printf("\n--------------------------------");
  37.     for (iSub = 0; iSub < 5; iSub++)
  38.     {
  39.         printf("\n%-20s    %2d", sName[iSub], iProd[iSub] );
  40.     }
  41.     return;
  42. }
复制代码

这个code编译好后,就出现

  1. Enter employee name 1: stevens
  2.          Enter production 1: 15
复制代码

下面不管多少回车都不出现2来,不知道是什么地方错了,gdb也没有调试出个所以来,·!
发表于 2005-3-18 13:15:30 | 显示全部楼层
最后一个 scanf 里‘\n’用的有问题。

还不如用 fgets 来输入,感觉 scanf 挺麻烦,fflush(stdin)又不管用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-18 14:15:48 | 显示全部楼层
fflush(stdin)还是管用的吧,不然连续的scanf容易出错,
确实是多了个\n,能说下系统为什么就不认我的回车了呢?
回复 支持 反对

使用道具 举报

发表于 2005-3-18 18:51:02 | 显示全部楼层
标准输入是行缓冲的,回车是把一行输入提交给内核处理。
http://dev.csdn.net/develop/article/21/21799.shtm
http://xs.blogchina.com/article_152621.1080856.html
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表