0

我在 C 中完全使用 getchar() 已经有一段时间了。在这种情况下,我试图读取一行并将该行的字符放入一个数组中。然而,在将 getchar() 分配给数组时,它会跳过一些字符。

例如输入“It skips all other”输出是...I\n \nk\np\n \nv\nr\n \nt\ne\n。( \n 只是代表新行。)

int N = 0;

char message[80] = {};

do
{
    message[N] = getchar();
    N++;
    printf("%c\n", message[N-1]);
}
while(getchar() != '\n');

感谢您抽出宝贵的时间,正如我几乎在任何时候尝试过使用 getchar() 之前所说的,它总是会产生一些意想不到的结果。我不完全理解该函数如何读取字符。

4

2 回答 2

8

您在 while 条件和 do-while 主体内调用 getchar() 两次。

试试这个代码:

int N = 0;
#define MAX_SIZE 80

char message[MAX_SIZE] = {};
char lastChar;

do
{
    lastChar = getchar();  
    if (lastChar == '\n')
        break; 
    message[N] = lastChar;
    N++;
    printf("%c\n", message[N-1]);
}
while(N < MAX_SIZE);

更新:添加了对数组最大大小的检查,而不是使用无限的 do-while 循环。

于 2013-02-27T06:58:21.990 回答
3

getchar()每次通过循环调用两次。每次调用getchar()它都会消耗一个字符。因此,不要调用getchar()您的while( ... )条件,而是将值message[N]与换行符进行比较。

于 2013-02-27T06:59:40.463 回答