【问题标题】:reading a number into a char将数字读入 char
【发布时间】:2014-07-22 18:36:53
【问题描述】:

如果我将像 20,30,10000...9999 这样的整数读入变量 a 会发生什么?它只打印我读过的数字中的第一个数字......这是为什么呢? 例如,如果我阅读 123,它会在屏幕上打印 1。难道不应该将整数 123 转换为等效的 ASCII 字符表示吗?

#include <stdio.h>

int main() {

    char a;

    scanf("%c", &a);
    printf("%c", a);

    return 0;
}

这是一道 C 语言考试题。

【问题讨论】:

  • scanf("%c", &amp;a);stdin 读取char。当用户键入“1”、“2”、“3”回车时,4 个char 被赋予程序:'1''2''3''\n'。对于键盘,用户通常只输入文本,而不是整数。像scanf("%c", &amp;a); 这样的函数读取一个charint d; scanf("%d", &amp;d); 将读取文本并将该文本转换为 int
  • 谢谢!这很有帮助
  • 也千万不要做char ch; scanf("%d", (int*)&amp;ch);!!!它将在 ch 位置写入 sizeof(int) 字节,覆盖(破坏)附近的其他变量。我曾经遇到过一个相关的错误。

标签: c char int scanf


【解决方案1】:

不,它将被机器表示为小整数的字符读入变量中。

如果您输入 100(数字 100,三个按键,因此三个字符),它只会存储第一个 字符,即前导1

如果您想将数字转换为实际整数,您当然应该使用%dint 变量。

使用%c 打印将通过将小整数值解释为字符(而不是整数)来打印回单个字符。因此,对于 100 的输入,您将看到 1 打印出来,即表示十进制数字一的字符。

如果您想打印出您读入的字符的数字表示,请使用%c 进行扫描,但使用%d 进行打印,然后在printf() 调用中将char 转换为(int)

【讨论】:

  • 我仍然很困惑...所以它读取等效的 ASCII 字符,而该字符又表示为存储在变量中的小整数?但是当我打印出来时为什么不打印字符?
  • 如果您使用%c 打印它,那么它将打印“字符”,在您的情况下1 这是一个相当典型的字符。我现在不明白你的困惑。
  • 哦,好吧,所以它把 1 读作像 '1' 这样的字符而不是数字 1,所以如果我读到 12,这里实际上是两个字符 '1' 和 '2' ...跨度>
  • Huu,这必须是带有标记为“10000”的键的laaaarge键盘...... ;-)
【解决方案2】:

问题是 %c 为控制台输入解析一个字符。从像 123 这样的数字中,它只取第一个字母并处理其余的字母。解析 int 值的方法是在 scanf 函数上使用 %d。

【讨论】:

  • 我知道,但是假设我输入了值 9,那么它应该在屏幕上打印 \t,因为我在 printf 中使用了 %c,但它却打印了 9
  • %c 获取控制台输入的第一个字符的 ascii 码。当你在控制台上写 9 并用 %c 解析时,9 的 asccii 码存储在变量中。之后你使用 printf("%c", a) 你会再次看到 9 因为 %c 打印变量值的 ascci 表示。
【解决方案3】:

不,它只会将第一个字符读入 char 变量。 char 变量如何同时存储多个字符?不能。

因此,如果您想要 ASCII 值,请输入整数。

int a;
scanf("%d", &a); // suppose input is 65
printf("%c", a); // prints 'A'
printf("%d", a); // prints 65

char a;
scanf("%c", &a); // suppose input is 65
printf("%c", a); // prints '6'
printf("%d", a); // prints 54 which is the ASCII value of '6'

【讨论】:

  • A char 是一个 8 位整数,有符号或无符号取决于实现。所以它可以很好地表示 256 个不同的整数值。
  • 我的评论提到了这一点:“char 变量如何存储多个字符?
  • 我必须参加语言课。
  • 要在此处结束循环,您可以在您的回答中遵循以下行:printf("%c", a); 与另一个:printf("%d", a);来说明格式说明符的不同之处。
  • @ryyker 谢谢!我在你发帖前几秒钟就用这种技术弄明白了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
相关资源
最近更新 更多