输入和输出的字符数不一样吗?
int ch;
while(ch != '\n')
{
ch = getchar();
putchar('K');
}
答案 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
进行正确比较。