-1

入力された文字列の最初の非空白文字を返す関数を作成するように依頼されました。

「こんにちは」など、空白で始まらないものを入力すると機能します。しかし、「こんにちは」のようなものを入力すると、空白が返されます。

これが私のコードです:

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;
}
4

4 に答える 4

2
ch = getchar();
while (ch == 32)
{
    ch = getchar();
}
return ch;
于 2012-11-30T14:31:32.543 に答える
1

簡単なオプションの1つは、scanf()の代わりに使用することですgetchar()scanf()文字列を取得し(したがって、文字の取得をループする必要はありません)、開始空白をすべて削除するため、最初の文字を取得する必要があります。

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

それで

>>      hello

104を返します(ascii'h')

于 2012-11-30T14:45:44.380 に答える
0

最初は、1文字の入力のみを取ります。そして、それが32 int値に等しくない場合、プログラムは無限ループにあるはずです!!!! これは何もないコードです。

于 2012-11-30T14:31:54.013 に答える
0

whileループ内で次の文字をフェッチし続けないことを除いて、ここではすべて問題ないように見えます。つまり、最初の文字、たとえば空白をフェッチし、変数が変更されないwhileため、そのループを永久に継続します。ch

whileループ内に追加ch = getchar();して、チェックする次の文字を継続的にフェッチするようにしてください。また、文字が空白である場合に次の文字をフェッチし続けるために、文字が32に等しいか、等しくない確認する必要があることに気付きました。

于 2012-11-30T14:32:12.510 に答える