gpt4 book ai didi

c - 为什么这段代码不能正确压缩空格?

转载 作者:行者123 更新时间:2023-11-30 16:44:41 27 4
gpt4 key购买 nike

我正在学习 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);
}
}

最佳答案

不错的尝试。但你犯了一些错误。

当遇到除空格以外的字符时,您没有将计数器设置为初始值。因此,如果您的输入在非空白字符之间有多个空格(例如 33 33 33),则将打印第一个空格并跳过其他空格。因此输出将是 33 3333

您必须了解 char 数据类型仅以 ASCII 编码存储单个字符 & 。当您对 char 应用算术运算时,它只会更改字符值。因此,当您减少 char 变量时,它引用另一个字符。所以最终它会打印垃圾值。

试试这个。

while ((c = getchar()) != EOF){
if (c == ' '){
++nl;
if (nl >= upper){
continue;
}
}
else{
nl=0;
}
putchar(c);
}

逻辑很简单...
如果有多个空格,则输入第一个空格并跳过其他空格。

关于c - 为什么这段代码不能正确压缩空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44402182/

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