方法一:
#include <stdio.h>
int main(void)
{
char s[128];
char ch;
int i = 0;
printf("请输入文字:\n");
while((ch=getchar()) != '\n')
{
if (ch != ' ')
{
s[i] = ch;
i++;
}
}
s[i+1] = '\0'; // 字符串结束标识符
printf("去掉空格后的文字:%s\n", s);
return 0;
}
方法二:(转载)
作者:Mudrobot
来源:CSDN
原文:https://blog.csdn.net/qq_40079933/article/details/80149956
版权声明:本文为博主原创文章,转载请附上博文链接!
#include <stdio.h>
char st[500];
int u = 0;
void read()
{
char c;
while(c != '\n')
{
c = getchar();
while(c == ' ')
{
c = getchar(); // 用于过滤空格
}
st[u] = c;
u++;
}
}
int main()
{
read();
for(int i = 0; i < u; i++)
{
printf("%c", st[i]);
}
return 0;
}
如果前面一直没有空格,则一直进行外部while循环,将本次输入的字符写入st数组;一旦检测到空格,则进入内层while循环,如果一直是空格就一直在内层循环,一直过滤空格,直到输入非空格,跳出内层while循环,继续写入st数组。
问题1:方法二中,如果输入12<空格><空格>34<空格><回车>
,最后的回车是会被写入数组的。因为在回车前是<空格>
。
如果输入12<空格><空格>34<回车>
,则最后的回车不会被写入数组。
但是,结果却似乎是最后的回车都没有写入数组。
问题2:getchar()不是每输入一个字符就提交判断,因为如果把外层循环的终止条件改成其他字母比如p
就不行。
网友评论