c - 使用 isspace 和 getchar() 忽略空格

标签 c

我想用 getchar() 从命令行读取数字, 用 isspace() 删除所有空格并用 putchar() 打印出来. 但是,以下代码不会删除任何空格。输入10 1导致输出 10 1 .

你能帮我找出我的错误吗?谢谢!

int main(void){

    char input[UINT_MAX];
    int i = 0;
    while ( i < UINT_MAX && (input[i] = getchar()) != '\n' && !isspace(input[i])){
        i++;
    }
    if ( i == UINT_MAX ) {
        printf("Too long");
    }
    else {
        input[i] = '\0';
    }
    i = 0;

    while( input[i] ) {
        putchar(input[i]);  
        i++;
    }

    return 0;
}

请注意,我不允许使用任何额外的 header 。我仅限于上述功能。

最佳答案

修复代码的最短方法(在使数组绑定(bind)一个合理的较小值之后,如评论中所述)是从循环条件中删除 isspace() ,并将其添加到循环体内的 i++ 之前,如

  if isspace(input[i]) continue          

照原样,当您找到一个 ws 时,您将停止处理。相反,通过转发移动到下一个输入字符,同时不增加 i。您还应该删除冗余检查 if i == bound,以便始终执行 else 子句中当前的内容(如果最后一个字符是 ws,则需要用 '\0' 覆盖它)。

关于c - 使用 isspace 和 getchar() 忽略空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24221312/

上一篇:C 宏磅符号和加号

下一篇:C++类名冲突

相关文章:

c - main() 递归的不可预测的输出

c - 如何将 sscanf 用于带空格的字符串?

计算节点值的最大总和并计算给出总和的特定路径[C]

c - 无法在快速排序中正确传递数组

c - Laravel: Controller 发送到 C

c - 如何在VxWorks中为特定套接字fd(非系统范围)设置TCP保持事件间隔?

c - 指向 C 中结构表的指针

c++ - 在发送有关帖子的一些信息之前,如何让 libcurl 进行回调?

c++ - 着色和调色板最佳拟合算法

c - 分段故障