3

以下のコードで「Enter」と入力すると scanf が機能しないのはなぜですか?

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char**argv)
{
 char *msg = malloc(100*sizeof(char));
 do{
        scanf("%s",msg);
        printf("%s\n",msg);
 } while(strcmp(msg,"")!=0);
}
4

3 に答える 3

3

scanf() は、空白で区切られた文字列を待機するため、入力などを行います。そのため、ENTER を無視し、「実際の空でない文字列」を待機します。空の文字列も取得したい場合は、使用する必要があります

fgets(msg, 100, stdin);
于 2013-11-05T16:52:47.477 に答える
0

Scanf は、指定された形式 (この場合は文字列) の入力バッファーを調べます。これには、空白をスキップする効果があります。言葉の間にスペースを入れると、次の文字列を探すスペースをスキップします。同様に、タブや改行などもスキップします。代わりに %c を入れるとどうなるか見てください。現在文字を検索しているため、改行を取得し、「\ n」は有効な文字として構成されます。

空白を取得するときに同じ効果が必要な場合は、それを %c に変更し、print ステートメントで改行エスケープ文字を削除します。

于 2013-11-05T16:55:01.180 に答える