我希望使用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;
}
请注意,我不允许使用任何额外的标头。我仅限于上述功能。
答案 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;
}