鱼C论坛

 找回密码
 立即注册
查看: 1047|回复: 5

[已解决]字符输入输出

[复制链接]
发表于 2023-11-13 20:58:07 | 显示全部楼层 |阅读模式

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

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

x
题目:请编写程序,输入一行字符(用回车符结束),输出每个字符以及与之对应的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函数对字符进行同样的操作,程序应该怎样改呢?谢谢
最佳答案
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码值,同时按照每行三对的格式进行输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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码值,同时按照每行三对的格式进行输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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函数进行字符输入的方式。希望能帮到你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

 楼主| 发表于 2023-11-13 21:18:56 | 显示全部楼层
谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

你好:scanf("  %c", &ch); 直接改成scanf("%c",&ch),引号内在%c之前不要故意输入一个空格好像也可以正常输出啊?那请问为什么要注意输入一个空格呢?谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 18:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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