【发布时间】:2017-06-07 01:43:12
【问题描述】:
我正在研究 K&R 的C 编程语言。我在这里做一个练习,上面写着“编写一个程序,将其所有输入复制到其输出,将一个或多个空格的每个字符串替换为一个空格。”
我相信我已经解决了。有些。当第一次使用a.out 运行程序时,我可以输入一个带有多个空格的数字,然后返回一个空格。但是,当我转到下一行并重试时,它会返回完全没有空格的数字。此外,如果我输入一串字母,例如“33 33 33”,它将只为整行留下一个空格。它变成“33 3333”。
我知道我可以只用 Google 搜索练习本身的答案,但我认为这不会帮助我了解我的代码为何如此运行。任何帮助将不胜感激。
main()
{
int c, nl, upper;
nl = 0;
upper = 2;
while( ( c = getchar() ) != EOF )
{
if( c == ' ' )
{
++nl;
if( nl >= upper )
{
--c;
--nl;
}
}
putchar(c);
}
}
【问题讨论】:
-
K&R 的C 编程语言 是一本非常过时的书,随着现代 C 语言的显着发展,它现在已经过时了。上一版发布于 1988 年 - 但从那时起,我们就有了 C89、C90、C11 和许多特定于编译器的变体。我的建议是把书收起来,然后从你的图书馆借一本更新的书籍,尤其是关注 C11 的书籍(以及反对原始 C 标准库的许多 unsafe 特性的书籍,喜欢
gets:stackoverflow.com/questions/4588581) -
它对我有用。我使用标准的包含文件吗?
-
是的,我相信我使用的是标准包含文件。我正在使用
。对我来说,它只在第一个“双空间”上起作用。 “hello__cold__World”,其中每个 _ 都是空白,返回“hello_coldWorld”,我不知道为什么。 -
c -= ' '的目的是什么?这相当于c = c - 32。 -
dai,其实我已经改了,会在我的主帖里修改为
--c,但是问题还是出现了
标签: c