使用isspace和getchar()忽略空格

时间:2014-06-14 15:13:00

标签: 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;
}

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

2 个答案:

答案 0 :(得分:2)

修复代码的最短方法(在使数组绑定一个合理的较小值之后,如注释中所述)是从循环条件中删除isspace(),而是在循环体内的i ++之前将其添加为< / p>

  if isspace(input[i]) continue          

原样,当你找到一个ws时你会停止处理。相反,通过转发移动到下一个输入字符,而不是增加i。如果i == bound,你也应该删除冗余检查,所以当前在else子句中的内容总是被执行(如果最后一个字符是ws,它需要被&#39; \ 0&#39;)覆盖。

答案 1 :(得分:0)

为你的角色阵列分配4千兆字节是疯狂的!选择一些合理的值并为其定义一个常量。

#include <stdio.h>
#include <ctype.h>

#define MAX_INPUT 10000

int main() {
  char input[MAX_INPUT + 1];
  int i = 0, c;

  while (i < MAX_INPUT && ((c = getchar()) != EOF) && c != '\n')
    if (!isspace(c))
      input[i++] = c;
  input[i] = '\0';

  for (i = 0; input[i]; i++)
    putchar(input[i]);
  putchar('\n');

  return 0;
}