getchar()过滤输入中的空格

2019-08-04  本文已影响0人  mark_x

方法一:

#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就不行。

上一篇下一篇

猜你喜欢

热点阅读