字符输入输出
题目:请编写程序,输入一行字符(用回车符结束),输出每个字符以及与之对应的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函数对字符进行同样的操作,程序应该怎样改呢?谢谢 程序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码值,同时按照每行三对的格式进行输出。 程序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函数进行字符输入的方式。希望能帮到你。 Mike_python小 发表于 2023-11-13 20:59
程序2中的问题是由于在while循环内部没有再次读取新的字符,导致循环一直处理相同的字符,从而陷入无限循环 ...
嗯嗯,谢谢你! 谢谢! Mike_python小 发表于 2023-11-13 20:59
程序2中的问题是由于在while循环内部没有再次读取新的字符,导致循环一直处理相同的字符,从而陷入无限循环 ...
你好:scanf("%c", &ch); 直接改成scanf("%c",&ch),引号内在%c之前不要故意输入一个空格好像也可以正常输出啊?那请问为什么要注意输入一个空格呢?谢谢
页:
[1]