1

我正在使用带有gcc的 Ubuntu 12.04 LTS 。谁能告诉我,这个字符类型变量怎么能容纳超过一个字节?注意:此程序将回显您键入的所有字符(多个字符)。例如,如果您键入“thilip”,那么它将回显为“thilip”。每个字符包含 8 位(一个字节),所以我输入了 6 个字符(6 个字节)。那么,getchar 函数如何将此值分配给只能保存一个字节的字符类型变量?

#include <stdio.h>
int main(void)
{
    char ch;

    while ((ch = getchar()) != '#')
        putchar(ch);

    return 0;
}
4

3 回答 3

2

它不能。每次getchar调用时,其先前的值都会被新的值覆盖。

于 2013-10-20T18:20:31.903 回答
1

char类型变量为 1 字节。您可以通过以下方式检查

printf("%zu", sizeof(char));  

如果您想知道在提供输入时

asdf  

它正在打印

asdf  

因为ch持有这个asdf,那么你就错了。getchar()一次只读取一个字符。
当您输入多个char' 时,这组字符将存储在输入缓冲区中。然后,getchar()从这个输入缓冲区中一个一个地读取一个字符,并一次将一个字符分配给char变量ch,然后putchar()一个一个地打印出来。每次迭代后被 .ch读取的新字符覆盖getchar()
您可以通过运行此代码检查一次 getchar()只读取一个char

#include <stdio.h>

int main(void)
{
    char ch;
    ch = getchar();
    putchar(ch);

    return 0;
} 

输入:

thilip  

输出:

t  

边注:

getchar()返回int。你应该声明chint.

于 2013-10-20T18:13:00.817 回答
0

它是一个字节。是什么让你觉得不是?

于 2013-10-20T18:14:33.603 回答