2

ロール番号とフルネームを入力として取り、それを単純に表示するプログラムを作成したい私のコードは. このコードは、gets 関数を介して n の値のスキャンをスキップします。このエラーが発生する理由と、これを克服する方法を教えてください。

 #include<stdio.h>
 #include<conio.h>
 void main()
 {
 int r;
 char n[30];
 printf("enter your roll no");
 scanf("%d",&r);
 printf("enter your full name");
 gets(n);
 printf("roll no is %d ",r);
 printf("name is %s ",n);
 getch();
 }

以下のコードは、最初のスキャンで値を取得し、2 番目の値をスキップします。

#include<stdio.h>
#include<conio.h>
void main()
{
 int r;
 char n[30], f[30];
 printf("enter your roll no");
 scanf("%d",&r);
 printf("enter your full name");
 gets(n);
 printf("enter your full name of your father ");
 gets(f);
 printf("roll no is %d ",r);
 printf("name is %s ",n);
 printf("father name is %s ",f);
 getch();
 }
4

6 に答える 6

1

この問題の簡単な解決策は、とfflush(stdin);の間scanf();に追加することですgets();

#include<stdio.h>
#include<conio.h>
void main()
{
    int r;
    char n[30],fn[30];
    clrscr();
    printf("\nEnter roll ");
    scanf("%d",&r);
    fflush(stdin);
    printf("\nEnter name ");
    gets(n);
    printf("\nEnter father name ");
    gets(fn);

    printf("\n\nRoll %d",r);
    printf("\nname %s",n);
    printf("\nfather name %s",fn);
    getch();
}
于 2015-02-25T12:56:30.747 に答える
1

コードは「n」の値のスキャンをスキップしません。プログラムを実行するときは、ロール番号を入力してから、キーボードのENTERキーを押すと思います。これが原因です。ENTERキーを押すとすぐに、エスケープ シーケンス'\n'が配列nに保存されます。gets ()コマンドは完全に実行されています。


2 番目のケースでは、変数'n'はエスケープ シーケンスを格納し、次の変数'f'は次に入力する文字列を取ります。


コードを機能させるには、次のように scanf ステートメントを入力するだけです:-

scanf("%d ",&r);

%d の後のスペースに注意してください。

このコードを試してください-

#include<stdio.h>

int main(void)
{
    int r;
    char n[30], f[30];
    printf("Enter your roll no");
    scanf("%d ",&r);  // I have inserted a space after %d
    printf("Enter your full name");
    gets(n);
    printf("Enter your full name of your father ");
    gets(f);
    printf("\nRoll no is %d ",r);
    printf("\nName is %s ",n);
    printf("\nFather name is %s ",f);
    return 0;
}

ヒント:- gets() と puts() を使用しないようにする必要があります。

詳細については、こちらをご覧ください。

于 2013-10-17T11:52:44.640 に答える
0

なぜスキップされるのかわかりませんが、fflush(stdin) や fgets などの他の混乱を避けるために何ができるでしょうか。

次の行で gets(string) を使用するだけです。したがって、最初の gets コマンドをスキップすると、別のコマンドに進みます。

それを試してみてください乾杯、;)

于 2016-04-04T15:21:18.467 に答える