这是为循环的第一次迭代初始化变量的优雅方法吗?

问题描述 投票:0回答:1

这是一个 C 程序,它将输入复制到输出,用一个空格替换每个包含一个或多个空格的字符串。我不知道当程序启动并且还没有先前的值时继续进行的最佳方法是什么。

我想出了以下几点:

#include <stdio.h>

void main() {

        int actual, previous = -1;

        while((actual = getchar()) != EOF) {
                if(!(previous == ' ' && actual == ' ')) {
                        putchar(actual);
                        previous = actual;
                }
        }
}

这是可行的,但是我被告知不应将变量初始化为随机值。另一种选择是使用 do-while 循环,但如果程序获得一个空文件,它将无缘无故地执行 if 语句。

c variable-assignment variable-initialization
1个回答
0
投票

我只是设置一个可以检查的布尔标志,如果我们不是第一次迭代并且实际字符和前一个字符都是空格,我们可以跳过打印字符并更新前一个字符并将

first_char
标志设置为
false

这样

previous
在初始化之前永远不会被使用。

#include <stdio.h>
#include <stdbool.h>

int main(void) {
    bool first_char = true;
    int actual, previous;

    while ((actual = getchar()) != EOF) {
        if (!first_char && previous == ' ' && actual == ' ') {
            continue;
        } 
        
        putchar(actual);
        previous = actual;
        first_char = false;
    }  

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.