回 帖 发 新 帖 刷新版面

主题:关于C程序与打印ASCII码

<C Primer Plus>这本书中有一题,题目如下:
编写一个程序,要求输入一个ASCII码值(如65),然后输出相应的的字符。

题我是做出来了,然后我又想增加点东西进去程序中。比如,我运行后,按提示输入A,然后屏幕输出65,之后便不能再输入了。

意思就是我加了暂停函数,只能输入一次,程序不是很理想。我希望程序可以无限次的输入/输出,于是我想到循环,可是怎么循环?

我找什么条件来判断?我如何控制程序是否结束?其二:

我输入两个字符,如A和B,我事先知道ASCII码分别是65和66,但程序只是打印了我输入的第一个字符A的结果是65,可是我输入了两个呀。B呢?

然后我又想,如果我连续输入两个字符(这不是书中题目的本意,但那又怎样),能不能先打印第一个字符的ASCII码紧接着再打印第二个的

ASCII码?难道我要定义两个变量?如果我想输入3个字符,那得定义3个变量?100个呢?定义100个?明显不太现实。我仍然希望,程序可以

无限次接收输入(也许不能也不会,无限次的输入)。因为,程序的制作者知道他自己的程序是怎么回事。。但如果没看过源码的人,他们怎么知道?

就算我在程序一开始就用printf()提示用户可以输入几次,但这样的结果,仍然让人感觉缺少灵活性。其三:

仍然是我的程序中,什么都不键入直接按回车,屏幕输出ASCII码为10。这是为何?我查过,有这么一种回答,我只复制部分

“ASCII码值从32(空格)到128(€)之间的是可见字符,其它的都是不可见字符,如果你想根据ASCII码值打印字符,你要控制输入值必须在32-128之间,其它的都算越界。”

以上就是。值为10的字符在ASCII码表中为^Jcarriage return。算是不可见吧,但按回车偏偏就输出了,还是Tab键,也能输出对应的009,为什么?

然后是,那个人说“ASCII码值从32(空格)到128(€)之间的是可见字符”可我只找到32到126的,127和128呢?键盘上怎么打出来?

以上的,其一、二、三就是我现在暂时遇到的问题,不是我不想百度,只是不知道该怎样描述,所以还是选择发帖。我已经发过问问,可是被我选为满意答案的那个人的源码不能运行,我以为他写的源码没错。我的环境是Dev-c++.

请大神帮帮忙,按照意思,写出能在我的环境下顺利运行的程序,只要程序能运行,我会努力试图理解思想。为了方便,我把一、二两个问题结合起来出个题目.以下:

编写一个程序,要求输入ASCII码值(如65),然后输出相应的的字符。可以重复输入/输出,如果同时输入两个ASCII码值(包括两个),则统计输入的个数并按顺序打印各个ASCII码值对应的字符,如同时输入32,则屏幕输出:输入两个ASCII值,3为51 2为50。

另外,我只是一个新手,一个什么都不懂的新手,刚刚看完数据类型,很多仍然不懂,请尽可能多些注释。请不要喷我,更不要拿砖拍我~~。如果看不明白我的问题,

请指明,我会重新说明看不明白的地方,谢谢。另外,我附上我写的源码,可以的话,给些建议,谢谢。小弟无以回报,唯有感谢再感谢。以下便是:

#include <stdio.h>
#include <stdlib.h>


main(void)
{
    printf("输入单个数字、字母、符号,按下回车键将显示所输入字符的ASCII码\n");
    char cha;
    scanf("%c",&cha);
    printf("输入字符的ASCII码是 %d \n",cha);
    system("pause");
    
}
小弟刚来这论坛.一来就求助,见谅见谅啊~~

回复列表 (共2个回复)

沙发

问:如何判断输入结束?
答:C语言编程,有一个概念叫做EOF,即end of file,文件结束。当然,对于C语言来说,各种输入都可以看作是文件,所以键盘输入结束也可以说成是EOF。如何判断EOF?答案是通过scanf的返回值。如果scanf函数在读取输入的时候遇到EOF,它就停止读取,然后返回EOF。
对于windows系统,用键盘按Ctrl+Z,就可以代表输入结束了。
代码如下:
char c;
if (scanf("%c", &c) == EOF) {
    /* 读取字符却遇到了结束,此时没有读取到实际的字符,变量c不会被赋值 */
} else {
    /* 读取字符成功,变量c会被赋值为所读的字符 */
}

问:要定义多少个变量?如何循环?
答:一个变量就够了,不管输入多少内容,只要循环,就可以解决。
代码:
while (1) {
    char c;
    if (scanf("%c", &c) == EOF) {
        break; // 跳出循环
    }
    printf("输入字符的ASCII码是 %d\n", c);
}

问:为什么输入回车得到的结果是10,输入tab得到的结果是9?
答:这样的结果是正确的。ASCII确实定义了回车符和制表符,其值分别是10和9。C语言有一个函数叫做isprint(需要include <ctype.h>),用于判断一个字符是否为可打印的字符。
if (isprint(c)) {
    /* c是可打印的字符 */
} else {
    /* c不是可打印的字符 */
}

问:有些字符用键盘打不出来?
答:你可以试试复制粘贴,效果与键盘输入是相同的。

板凳

谢谢啊,我回家再想一想.

我来回复

您尚未登录,请登录后再回复。点此登录或注册