老牛来学习 发表于 2020-3-31 22:24:26

C语言

#include<stdio.h>

int main()
{
    int i;
    int num;
    char ch,ch1;
    printf("您要输入的单词个数:");
    scanf("%d",&num);

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

    }
}

为什么一输入单词个数就自己输出零??

人造人 发表于 2020-3-31 22:30:39

#include<stdio.h>

int main()
{
    int i;
    int num;
    char ch,ch1;
    printf("您要输入的单词个数:");
    scanf("%d",&num);
    getchar();

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

    }
}

老牛来学习 发表于 2020-3-31 22:37:27

人造人 发表于 2020-3-31 22:30


想问一下为什么会这样,整个的执行过程时怎样的呢

lovely539351 发表于 2020-3-31 22:44:05

第一次scanf()读取你输入的数值后在缓存区还留了一个\n字符,
然后循环里第一次scanf()把留在那里的\n读取了
你在循环中改成printf("%d %c", ch1, ch) 就发现是先循环了一次,
在第一次scanf()后加一个getchar();把留在缓存的\n抛弃了就行了

4goodworld 发表于 2020-3-31 22:46:57


你下个断点,然后跟一下你就会发现
原来当你在 scanf("%d",&num);输入操作的时候,比如你输入了5,然后你紧接着按了回车,那么系统会在下一步跟进,认为你在scanf("%c",&ch);这个步骤输入了回车键,换行的"\n"ascii码为10
页: [1]
查看完整版本: C语言