2017-12-08 5 views
-1

私は自分のプログラムに問題を抱えていましたが、私はその理由を理解していません。 私は2つのデータ文字列を読み込み、プログラムは最初の読み込みをスキップし、2番目の読み込みでジャンプします。かなり大きいと私は誰にも例it.For時間の読み取りと理解を無駄にしたいとは思わないので、私はここにプログラムを配置することはできません。2データ文字列を読む

struct agenda { 
    char nume[20]; 
    char prenume[20]; 
} vector[50]; 

void adaugare(){ 
    printf("x="); 
    gets_s(vector[0].nume); 
    printf("y="); 
    gets_s(vector[0].prenume); 
} 

そして、私が構築し、それを実行したときに、それが唯一の読み込み編集:

struct agenda { 
    char nume[20]; 
    char prenume[20]; 
}vector[50]; 

void adaugare(); 

void main() { 
    adaugare(); 
    _getch(); 
} 

void adaugare() { 
    int numar; 
    system("cls"); 
    printf("\n\tCate contacte doriti sa adaugati? "); 
    scanf_s("%d", &numar); 
    for (int i = 0; i < numar; i++) { 
     printf("\nIntroduceti contactul %d\n", i); 
     printf("\tIntroduceti numele contactului %d: ", i); 
     gets_s(vector[i].nume); 
     printf("\tIntroduceti prenumele contactului %d: ", i); 
     gets_s(vector[i].prenume); 
     } 
} 

この場合、ビルドして実行すると、2番目の文字列だけが読み込まれます。

+0

これはプログラムの最初の入力ルーチンではないと思います... –

+0

[ask]を参照し、コードの関連する**部分を[mcve]に減らしてください。私たちは完全にコンテキストからコードを助けることはできません。 –

+0

'gets_s'呼び出しにバッファーサイズの2番目のパラメーターを入れてはいけませんか? –

答えて

0

まず、gets_s()とは何かを具体的に説明する必要がありますか? gets()またはtypoの実装ですか?

void adaugare() { 
    int numar; 
    system("cls"); 
    printf("\n\tCate contacte doriti sa adaugati? "); 
    scanf_s("%d", &numar); 

    fflush(stdin); 
    for (int i = 0; i < numar; i++) { 
     printf("\nIntroduceti contactul %d\n", i); 
     printf("\tIntroduceti numele contactului %d: \n", i); 
     fflush(stdin); 
     gets_s(vector[i].nume); 
     printf("\tIntroduceti prenumele contactului %d: \n", i); 
     fflush(stdin); 
     gets_s(vector[i].prenume); 
     } 

}

あなたは、入力バッファ(STDINをフラッシュしなければならないので:代わりに(のVisual C++用)@user3121023

// gets_s(vector[0].nume); 
    fgets(vector[0].nume,sizeof(vector[0].nume),stdin); 
    printf("y="); 
// gets_s(vector[0].prenume); 
    fgets(vector[0].prenume,sizeof(vector[0].prenume),stdin); 

EDITによってコメントで述べたように、バッファリングの問題を回避するためにgets_s使用fgets()の)を使用する前にgets_s()を使用してください。

私はそれが助けてくれることを願っています。

+0

gets()を使用できないので、gets_s()を使用する必要があります。私は同じ問題をfgetsで試しました。 2番目のコードを貼り付けてコピーし、gets_sをfgetsに置き換えると、同じ問題が発生します。 –

+0

私はウィンドウについてはわかりませんが、Linuxマシンでうまく動作します。あなたはVisual C++を使っていますか? yesの場合は、gets_s(vector [0] .name、sizeof(vector [0] .name))などを使用します。 – achal

+0

はい、私はVisual C++を使用しています。私はgets_s(vector [0] .name、sizeof(vector [0] .name))を試しました。 –

関連する問題