【问题标题】:Why output of number of 'K' are more than the input characters?为什么“K”个数的输出多于输入字符?
【发布时间】:2019-07-12 15:44:38
【问题描述】:

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

int ch;

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

【问题讨论】:

  • 顺便说一句,while(ch != '\n') 是未定义的行为,因为 ch 未初始化。
  • 另外,getchar() 返回一个 int,而不是一个 char。
  • @DeiDei 和 LeeDaniel 感谢您的回答。
  • 但问题是当我用“putchar(ch)”替换“putchar('K')”时,我对输出感到满意,即。输入输出字符数相同。

标签: c while-loop getchar putchar


【解决方案1】:

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

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

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

打印了 1 K。然后它将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 进行比较。

【讨论】:

  • 哦,即使我是新来的,你肯定知道我被卡住的那部分......你的答案优雅而简单,我得到了 90% 的答案,我需要学习更多。非常感谢!!
【解决方案2】:

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

修改代码sn-p如下

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 语句的条件下检查它。所以如果不将换行符算作输入字符,输出的字符将比输入的字符大一。

【讨论】:

  • 感谢您的回答,我是新来的,您的回答给了我更多渴望探索的新想法!您编辑的部分让我更容易理解,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 2021-11-01
相关资源
最近更新 更多