美文网首页
getchar()过滤输入中的空格

getchar()过滤输入中的空格

作者: mark_x | 来源:发表于2019-08-04 11:22 被阅读0次

    方法一:

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

    相关文章

      网友评论

          本文标题:getchar()过滤输入中的空格

          本文链接:https://www.haomeiwen.com/subject/fhiedctx.html