忽略空格getchar()

时间:2015-02-06 21:23:24

标签: c getchar

我无法忽略空白/标签。当用户从命令提示符输入字符时,它应该只接受除空格或制表符空格之外的任何字符。

例如:

$ ./a.out Character: =

然后,它是=

如果

$ ./a.out Character:      =

对于一堆空格,它应该检测为=

我已经声明了变量a。

char a;
printf("Character: ");
a = getchar();

代码:

while((a = getchar()) != EOF){
        if( a != ' ' || a != '\t'){
            a = getchar();
            break;
        }
    }

任何帮助都会很棒。感谢。

6 个答案:

答案 0 :(得分:3)

更新:正如chux观察到的那样,getchar()返回类型int,如果将结果分配给类型变量,则无法成功读取所有可能的字符char。实际上(我添加),您可能会通过这样做来调用实现定义的行为。简而言之,变量a应该有int类型。

话虽如此,看起来你想要这些内容:

do {
    a = getchar();
} while (a == (unsigned char) ' ' || a == (unsigned char) '\t');

请注意,EOF' ''\t'不同,因此您可以安全地推迟测试,直到循环之后。

另请注意,如果您想忽略换行符和其他空白字符,那么您可以在标准isspace()库函数中得到很好的使用。

答案 1 :(得分:1)

怎么样:

 #include <ctype.h>

 int a;

 do
 {
     a = getchar();
 } while (isspace(a));

由于EOF不是空白字符,因此您无需专门处理它。

如果您愿意,可以将它放在自己的一个小功能中:

int
getcharnospace()
{ 
    int a;
    do
    {
        a = getchar();
    } while (isspace(a));
    return a;
}

答案 2 :(得分:1)

int a;
while(a=getchar()){
       if(a==' ' || a=='\t')
             continue;
       else
             putchar(a);
}

答案 3 :(得分:0)

使用break,您可以停止while循环。请改用continue

while((a = getchar()) != EOF){
    if( a != ' ' || a != '\t') continue;
    [...]
}

答案 4 :(得分:0)

您可以将while()循环体修改为

while((a = getchar()) != EOF){
        if( a == ' ' || a == '\t')
              continue;                // if space ot tab is detetected, scan for next input
         else
          {
             putchar(a);                 //neither a space nor a tab, print it.
             break;
          }
    }

此外,由于getchar()的返回类型为int,您应使用int a

答案 5 :(得分:0)

  1. 空格' '不是C中唯一的空格char
  2. 标签'\t'是C的空格char之一。
  3. 使用int ch而不是char ch明确保存getchar()的所有不同结果。
  4. isspace(EOF)总是假的。
  5. 使用issapce(),它是检测空白区域的C标准函数。

    // char a;
    int a;
    printf("Character: ");
    
    // All that is needed to consume white-space characters
    while(isspace(a = getchar()));