我无法忽略空白/标签。当用户从命令提示符输入字符时,它应该只接受除空格或制表符空格之外的任何字符。
例如:
$ ./a.out Character: =
然后,它是=
如果
$ ./a.out Character: =
对于一堆空格,它应该检测为=
我已经声明了变量a。
char a;
printf("Character: ");
a = getchar();
代码:
while((a = getchar()) != EOF){
if( a != ' ' || a != '\t'){
a = getchar();
break;
}
}
任何帮助都会很棒。感谢。
答案 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)
' '
不是C中唯一的空格char
。'\t'
是C的空格char
之一。 int ch
而不是char ch
明确保存getchar()
的所有不同结果。 isspace(EOF)
总是假的。 使用issapce()
,它是检测空白区域的C标准函数。
// char a;
int a;
printf("Character: ");
// All that is needed to consume white-space characters
while(isspace(a = getchar()));