0

ここにCの小さなプログラムがあります.whileループでユーザー入力を取得したいのですが、行に空白を入れたいので使用scanf("%[^\n]s",name);しましたが、別の出力が得られます. while ループでスタックしています。

#include <stdio.h>

int main (int argc, char const *argv[])
{
    do
    {
    char name[20];
    scanf("%[^\n]s",name);
    printf("%s\n", name);
    }while (1);
    return 0;
}

出力:

adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA
adAD A SAF A SA FA

while ループを使用して、内部に空白を含むユーザーからの入力を取得したい。

4

5 に答える 5

0

これは、dt が ur prblm を解決する可能性があるコードですが、do while ループから抜け出すためにいくつかのチェック条件を含めることを検討する必要があります。それがうまくいくことを願っています

#include<stdio.h>
int main ()
{
char name[20];
  do
  {
   gets(name);
   puts(name);
  }while (1);
return 0;
}
于 2012-08-09T14:14:01.737 に答える
0

関数の戻り値を探して、ループscanfを決定する必要があります。break

于 2012-08-09T12:52:22.250 に答える
-1

次のように、gets() を使用して scanf() を置き換えることができます。

int main (int argc, char const *argv[])
{
    do
    {
    char name[20];
    //scanf("%[^\n]s",name);
    gets(name);
    printf("%s\n", name);
    }while (1);
    return 0;
}

しかし、`gets' 関数は危険であり、使用すべきではありません。

于 2012-08-09T13:01:40.143 に答える