为什么输出“ K”大于输入字符?

时间:2019-07-12 15:44:38

标签: c while-loop getchar putchar

输入和输出的字符数不一样吗?

int ch;

while(ch != '\n')
{
    ch = getchar();
    putchar('K');
}

2 个答案:

答案 0 :(得分:2)

变量ch未初始化。因此,由于变量ch的值不确定,因此while循环中的初始条件具有不确定的行为。

通过以下方式更改代码段

int ch;

while( ( ch = getchar() ) != '\n' && ch != EOF )
{
    putchar('K');
}

请注意,ch被声明为类型int。否则,如果编译器将类型char处理为类型unsigned char,则代码将无法工作。

关于你的问题

Why output of number of 'K' are more than the input characters?

然后您首先输出输入的字符,然后才在while语句的条件下检查它。因此,如果不将换行符算作输入字符,则输出字符将比输入字符大一。

答案 1 :(得分:2)

其他人提到您正在访问未初始化的变量,这会导致未定义的行为。但是即使您初始化了它,问题还是在于您正在测试变量ch 之前,并使用getchar()读取了字符。因此计数将减少1。

假设您键入1\n。第一次迭代会将ch'\n'的初始值进行比较。它们不匹配,因此它会执行

ch = getchar();
putchar('K');

印有1K。然后,它将ch'\n'的新值进行比较。由于ch == '1',它们不匹配,因此它再次执行循环主体。这会将换行符读入ch,并打印第二个K

然后重复循环。这次测试ch != '\n'失败,因此循环停止。

打印的K字符数是您键入的包括换行符的字符数。

解决此问题的一种方法是在循环之前 调用getchar()

int ch = getchar();
while (ch != '\n' && ch != EOF) {
    putchar('K');
    ch = getchar();
}

请注意,您需要将ch声明为int变量,以便可以与EOF进行正确比较。