0

この問題を回避できません。ユーザーが文字列を入力してからEnterキーを押し、次に別の文字列を入力する必要があります。彼/彼女が終わったら、もう一度Enterキーを押します(この最後の文字列には\n文字しかないので、いつ停止するかがわかります).

char * buff = malloc (100);

 printf("Type in strings, to finish hit enter\n");

 do{
       scanf (" %[^\n]",buff);
       //do some other stuff with the string
  } while(*buff);            

  printf("You have finished typing strings\n");

[^\n] コマンドは \n 以外のすべてを読み取るよう関数に指示しているため、\n がコンソール バッファーに保持されることを意味するため、私が思いついたこのアプローチは役に立ちません。私が単にそうするなら

while(*buff)
  {
      scanf ("%s",buff);
  }

Enter キーを押しても何もしません。他のアプローチはありますか?

4

2 に答える 2

4

ええ、scanf実際に文字を探しています。あなたが望むのはgets(ラインを取得すること)です。

[編集] ダニエル・フィッシャーが指摘したように:

gets言語から(ついに)削除されました。以前から、マニュアルページには長い間、使用しないでくださいと書かれていましたgets()

私のアドバイスは最善ではなかったようです。fgetsこれは、バッファー オーバーランから保護するため、 use を意味すると思います。とは異なりgets、改行文字も文字列に格納されるため、改行文字を確認するのはプログラマの責任です。

const size_t bufsize = 100;
char buf[bufsize];

while( fgets(buf, bufsize, stdin) != NULL )
{
    if( buf[0] == '\n' ) break;

    /* Do something with your string... */
}
于 2012-09-24T14:35:54.343 に答える
-1

水田が指摘したことに加えて(使用すると行全体を取得できます)、条件

while(*buff);   

ユーザー入力がヌル文字 (ASCII 値 0 など) でない限り、false になることはありません。改行文字 (\n) の ASCII 値は 10 でtrue、条件ステートメントで評価されます。

これを試して:

while(strlen(*buff) > 0);
于 2012-09-24T14:42:11.393 に答える