鱼C论坛

 找回密码
 立即注册
查看: 987|回复: 4

[已解决]C语言

[复制链接]
发表于 2020-3-31 22:24:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>

  2. int main()
  3. {
  4.     int i;
  5.     int num;
  6.     char ch,ch1;
  7.     printf("您要输入的单词个数:");
  8.     scanf("%d",&num);

  9.     for(i = 0; i < num; i++)
  10.     {
  11.         scanf("%c",&ch);
  12.         ch1 = ch % 10;
  13.         printf("%d",ch1);

  14.     }
  15. }
复制代码


为什么一输入单词个数就自己输出零??
最佳答案
2020-3-31 22:44:05
第一次scanf()读取你输入的数值后在缓存区还留了一个\n字符,
然后循环里第一次scanf()把留在那里的\n读取了
你在循环中改成printf("%d %c", ch1, ch) 就发现是先循环了一次,
在第一次scanf()后加一个getchar();把留在缓存的\n抛弃了就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-31 22:30:39 | 显示全部楼层
  1. #include<stdio.h>

  2. int main()
  3. {
  4.     int i;
  5.     int num;
  6.     char ch,ch1;
  7.     printf("您要输入的单词个数:");
  8.     scanf("%d",&num);
  9.     getchar();

  10.     for(i = 0; i < num; i++)
  11.     {
  12.         scanf("%c",&ch);
  13.         ch1 = ch % 10;
  14.         printf("%d",ch1);

  15.     }
  16. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-31 22:37:27 | 显示全部楼层

想问一下为什么会这样,整个的执行过程时怎样的呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-31 22:44:05 | 显示全部楼层    本楼为最佳答案   
第一次scanf()读取你输入的数值后在缓存区还留了一个\n字符,
然后循环里第一次scanf()把留在那里的\n读取了
你在循环中改成printf("%d %c", ch1, ch) 就发现是先循环了一次,
在第一次scanf()后加一个getchar();把留在缓存的\n抛弃了就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-31 22:46:57 | 显示全部楼层
QQ截图20200331224449.png
你下个断点,然后跟一下你就会发现
原来当你在 scanf("%d",&num);输入操作的时候,比如你输入了5,然后你紧接着按了回车,那么系统会在下一步跟进,认为你在scanf("%c",&ch);这个步骤输入了回车键,换行的"\n"ascii码为10

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
老牛来学习 + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 15:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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