【问题标题】:C - Return the first non-whitespace characterC - 返回第一个非空白字符
【发布时间】:2012-11-30 14:26:46
【问题描述】:

有人要求我编写一个函数,该函数返回输入字符串中的第一个非空白字符。

当我输入诸如“hello”之类的内容或任何不以空格开头的内容时,它就会起作用。但是当我输入“hello”之类的内容时,它会返回一个空格。

这是我的代码:

int question6()
{
    printf("Start typing stuff in \n");
    char myChar = returnFirstNonWhite();

    printf("First non-white space character is: %c",myChar);
}

int returnFirstNonWhite()
{
    int ch,temp;
    ch = getchar();
    while (ch != 32)
    {
        temp = ch;
        printf("Found first success %c\n", ch);
    }
    return temp;
}

【问题讨论】:

  • 您是否首先考虑获取字符串输入?
  • 这不是 getchar() 的用途吗?
  • 这样的代码已经有足够多的答案了。
  • getchar 得到一个字符,而不是一个字符串。
  • 我认为这将是一个更好的方法,否则您将不得不处理缓冲区并且内部仍然会发生循环

标签: c char ascii whitespace


【解决方案1】:
ch = getchar();
while (ch == 32)
{
    ch = getchar();
}
return ch;

【讨论】:

    【解决方案2】:

    一个简单的选择是使用scanf() 而不是getchar()scanf() 将接受一个字符串(因此无需循环获取字符),它会去除任何起始空白,因此您只需抓住它的第一个字符。

    int returnFirstNonWhite()
    {
        char str[50];
        memset(str, '\0', 50);
        scanf("%s", str);
        return str[0];
    }
    

    所以

    >>      hello
    

    将返回 104 (ascii 'h')

    【讨论】:

      【解决方案3】:

      一开始你只输入一个字符。而且如果不等于32 int值,程序应该是无限循环的!!!这是一个空代码。

      【讨论】:

        【解决方案4】:

        这里的一切似乎都很好,除了在您的 while 循环中您不会继续获取下一个字符。换句话说,它获取初始字符,比如说一个空格,然后在 while 循环中永远继续下去,因为 ch 变量永远不会改变。

        尝试在您的 while 循环中添加 ch = getchar();,以便它不断获取下一个要检查的字符。另外,我刚刚意识到您需要检查字符是否 等于 到 32,而不是 不等于,以便如果字符是空格,它会继续获取下一个字符。

        【讨论】:

          猜你喜欢
          • 2011-01-23
          • 2017-09-21
          • 2014-10-26
          • 1970-01-01
          • 1970-01-01
          • 2017-09-02
          • 2012-06-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多