gpt4 book ai didi

c - C 编程语言,比较练习 1-9 和 1-12 的解决方案时的混淆

转载 作者:行者123 更新时间:2023-12-05 09:34:38 25 4
gpt4 key购买 nike

作为一名编程新手,我一直在尝试自学 C,以便使用 The C Programming Language(第 2 版)更好地理解计算机。

到目前为止,该站点在解决问题方面非常有帮助,但有一个问题我无法解决。这是我建议的练习 1-12 的解决方案,使用我对 1-9 的解决方案作为背景。我想知道这个在线社区中是否有人会好心地指出我哪里出错了。

练习 1-9 要求您“编写一个程序,将其输入复制到输出,将多个空格中的每个字符串替换为一个空格

这里有很多方法可以给众所周知的猫剥皮,但对我来说最简单的解决方案是:

int c;

while((c = getchar()) != EOF)
{
if(c == ' ')
{
putchar(' ');
while((c = getchar()) == ' ') // if there are subsequent blanks
; // do nothing
}

if(c != EOF)
putchar(c);
}

现在练习 1-12 要求你“编写一个程序,每行打印一个单词的输入。

我的第一次尝试成功了,但把问题简单化了。

int c;

while((c = getchar()) != EOF)
{ if(c == ' ')
putchar('\n');

else
putchar(c);
}

所以我试图纠正这个问题以接受更广泛的输入,结果如下

int c;

while((c = getchar()) != EOF)
{
if(c == ' ' || c == '\t' || c == '\n')
{
putchar('\n');
while((c = getchar()) == ' ' || (c = getchar()) == '\t' || (c = getchar()) == '\n')
;
}

if(c != EOF)
putchar(c);
}

现在我知道当我运行它时这是错误的并且我在网上查找了其他非常简单的方法来解决这个问题。

我的问题是我不明白为什么它不起作用。对我来说,如果 1-9 的解决方案有效,我不明白为什么当我对 1-12 采用相同的原理时它会失败。谁能指出这一点,我们将不胜感激!

最佳答案

您所做的几乎是正确的,但是 getchar() 在每次调用时消耗一个输入字符。

你可以写

while ((c = getchar()) == ' ' || c == '\t' || c == '\n')

因为 || 运算符是从左到右处理的,中间有所谓的序列点;

虽然更清楚的是将 c 的初始化移出循环条件。

最后,使用 isspace 这将消耗任何 空白字符,输入更少:

#include <ctype.h>

int c;
do {
c = getchar();
} while (isspace(c));

关于c - C 编程语言,比较练习 1-9 和 1-12 的解决方案时的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66459951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com