C K&R 1.5.4 字数统计练习 1-9

标签 c word spaces counting

我想知道为什么下面的代码不能完全像下面的代码那样工作。 代码应该做的是删除多个连续的空格并只显示一个空格:所以“它有效”变成“它有效”。第一段代码只是让它看起来“有效”。

没用

#include <stdio.h>

main(){
    int c;
    int lastspace;

    lastspace = 0;
    while((c = getchar()) != EOF){
        if(c != ' ')
            putchar(c);
            lastspace = 0;
        if(c == ' '){
            if(lastspace == 0){
            lastspace = 1;
            putchar(c);
            }
        }
    }
}

作品

#include <stdio.h>

main(){
    int c
    int lastspace;

    lastspace = 0;
    while((c = getchar()) != EOF){
        if(c != ' ')
            putchar(c);
        if(c == ' '){
            if(lastspace != c){
            lastspace = c;
            putchar(c);
            }
        }
    }
}

最佳答案

在你的第一个例子中

if(c != ' ')
    putchar(c);
    lastspace = 0;

不会在 if 语句之后放置 {} 大括号,因此只有紧随其后的语句有条件地执行。更改缩进并添加大括号表明代码实际上是

if(c != ' ') {
    putchar(c);
}
lastspace = 0;

这就是为什么某些编码标准要求在所有控制语句之后使用 {} 的原因。

关于C K&R 1.5.4 字数统计练习 1-9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17998921/

相关文章:

C:什么是类型定义的 namespace ?

c - 如何在 c 中创建超过 10 亿位的整数数据类型

c - 在C中打印出一台机器的所有用户

c - 字计数器在 C 中得到负值

C#:我希望单词的每个字母都以新行开头

java - 我正在尝试删除空格并将文本文件转换为单行

Linux bash shell 脚本 - 文件名中的空格

c++ - 从 float 转换为 QByteArray

linux - 删除包含指定单词的所有行

android - 如何摆脱 LinearLayout 中的额外间距?