zeroto-alittel 发表于 2023-11-13 20:58:07

字符输入输出

题目:请编写程序,输入一行字符(用回车符结束),输出每个字符以及与之对应的ASCII码值,要求每行输出三对。
程序1:
#include <stdio.h>
int main(void)
{
char ch;
int i=0;
while((ch=getchar())!='\n')
{
i++;
printf("字符为%c,对应地ASCII值为%d;",ch,ch);
if(i%3==0) printf("\n");
}
return 0;
}
输出结果正确:如:
输入:
ABCDEG
字符为A,对应地ASCII值为65;字符为B,对应地ASCII值为66;字符为C,对应地ASCII值为67;
字符为D,对应地ASCII值为68;字符为E,对应地ASCII值为69;字符为G,对应地ASCII值为71;
Press any key to continue
但是改为程序2(只进行了微调):
#include <stdio.h>
int main(void)
{
char ch;
int i=0;
ch=getchar();
while(ch!='\n')
{
i++;
printf("字符为%c,对应地ASCII值为%d;",ch,ch);
if(i%3==0) printf("\n");
}
return 0;
}
同样的输入,结果却一直循环输出,请问为什么?
3.若不用字符的专用输入函数getchar(),而改用scanf函数对字符进行同样的操作,程序应该怎样改呢?谢谢

isdkz 发表于 2023-11-13 20:58:16

程序1和程序2的主要区别在于程序1使用了while循环和getchar()函数来逐个读取输入的字符,而程序2在一开始就使用了getchar()函数来读取输入的字符,然后进入while循环。这样的设计导致了程序2无法在每次循环中获取新的输入字符,因此导致了无限循环输出。

要使用scanf函数对字符进行同样的操作,可以按照以下方式修改程序:

#include <stdio.h>
int main(void)
{
    char ch;
    int i = 0;
    while (scanf("%c", &ch) != EOF && ch != '\n')
    {
      i++;
      printf("字符为%c,对应地ASCII值为%d;", ch, ch);
      if (i % 3 == 0)
            printf("\n");
    }
    return 0;
}


这样修改后,程序将能够正确地读取输入字符并输出相应的ASCII码值,同时按照每行三对的格式进行输出。

Mike_python小 发表于 2023-11-13 20:59:43

程序2中的问题是由于在while循环内部没有再次读取新的字符,导致循环一直处理相同的字符,从而陷入无限循环。

要修正程序2,需要在循环内部再次读取新的字符,以便继续处理输入的字符。修改后的程序如下所示:


#include <stdio.h>
int main(void)
{
    char ch;
    int i=0;
    ch=getchar();
    while(ch!='\n')
    {
      i++;
      printf("字符为%c,对应地ASCII值为%d;",ch,ch);
      if(i%3==0) printf("\n");
      ch=getchar(); // 读取新的字符
    }
    return 0;
}


使用scanf函数进行字符输入时,可以按照以下方式修改代码:


#include <stdio.h>
int main(void)
{
    char ch;
    int i=0;
    while(1)
    {
      scanf(" %c", &ch);// 注意空格,避免读取到换行符
      if(ch == '\n') break;// 判断是否读取到换行符
      i++;
      printf("字符为%c,对应地ASCII值为%d;",ch,ch);
      if(i%3==0) printf("\n");
    }
    return 0;
}


以上就是对程序2的问题原因的解释,以及对程序的修改,同时还给出了使用scanf函数进行字符输入的方式。希望能帮到你。

zeroto-alittel 发表于 2023-11-13 21:18:28

Mike_python小 发表于 2023-11-13 20:59
程序2中的问题是由于在while循环内部没有再次读取新的字符,导致循环一直处理相同的字符,从而陷入无限循环 ...

嗯嗯,谢谢你!

zeroto-alittel 发表于 2023-11-13 21:18:56

谢谢!

zeroto-alittel 发表于 2023-11-13 21:33:53

Mike_python小 发表于 2023-11-13 20:59
程序2中的问题是由于在while循环内部没有再次读取新的字符,导致循环一直处理相同的字符,从而陷入无限循环 ...

你好:scanf("%c", &ch); 直接改成scanf("%c",&ch),引号内在%c之前不要故意输入一个空格好像也可以正常输出啊?那请问为什么要注意输入一个空格呢?谢谢
页: [1]
查看完整版本: 字符输入输出