我想用 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/