0

2つの問題がありますが、これはより差し迫った問題です...

printf("Enter the term: "); scanf("%d", &input);
fprintf(inputf, "%d,", input);

printf("Enter the id: "); scanf("%d", &input);
fprintf(inputf, "%d,", input);

printf("Enter last name: "); scanf("%s", name);
fprintf(inputf, "%s,", name);

printf("Enter first name: "); fgets(name, 15, stdin);
fprintf(inputf, "%s,", name);

printf("Enter the subject: "); scanf("%s", subsec);
fprintf(inputf, "%s,", subsec);

printf("Enter the catalog number: "); scanf("%d", &input);
fprintf(inputf, "%d,", input);
//ISSUE HERE!
printf("Enter the section: "); scanf("%s", subsec);
fprintf(inputf, "%s\n", subsec);

この情報をすべて入力し、最後の変数エントリで Enter キーを押すたびに、「実行時チェックの失敗 #2 - 変数 'subsec' の周りのスタックが壊れています」というウィンドウが表示されます。私は続けることができ、プログラムは私が望んでいることをほぼ実行し、機能しますが、なぜこれが起こっているのですか?

私の2番目の部分は、姓を入力してから名を入力したいときです.firstname文字列変数のEnterキーを押すと、「\ n」文字が取り込まれます.姓名は、空白を含む文字列を保持できる必要があります。どうすれば一石二鳥で二羽の鳥を殺すことができますか? fget を使用して空白を保持できるようにしましたが、「\n」キャプチャの問題が発生しましたが、scanf に戻すと、空白を保持できません!

編集:これはサブ秒です

char subsec[MAX_SUBSEC];

MAX_SUBSEC は 3 に設定されています。ご覧のとおり、以前は使用していましたが、2 番目の scanf (サブジェクトではなく、セクション用のもの) が subsec の入力の元の使用法を上書きすると考えました。私は間違っていると言うつもりですか? そして、私はこれを行うことを許可されていないため、問題は...

件名の入力は「CSE」、セクションの入力は「R01」になります。はい、これはすべてファイルに入れられます。

4

2 に答える 2

3

MAX_SUBSEC3で、件名またはサブセクションに2文字を超える文字を入力するとsubsec、スタック上の配列がオーバーランし、スタックフレームが破損します(問題が発生する場合と発生しない場合があります。使用する必要があります。

scanf("%2s", subsec);         /* read up to two non-whitespace characters for subsec */

2文字以上(および末尾のNUL)を読み取って保存しようとしないようにするためsubsec

また、追加することもできます

scanf("%*[^\n]");             /* discard the rest of the input line */

各scanfの後で、現在、残りの入力行を破棄する必要があります(必要なデータ項目が複数入力された場合に備えて、2つを次のように組み合わせることができます。

scanf("%2s%*[^\n]", subsec);  /* read 2 chars and discard the rest of the line */

お望みならば。

姓名に空白を使用して最大15文字(NULを含む)の文字列を入力するには、次を使用します。

scanf(" %14[^\n]", name);     /* read up to 14 chars from the line */

これにより、先頭の空白(前の行の改行を含む)が破棄されてから読み込まれnameますが、誰かが空白を入力した場合に名前の末尾の空白は破棄されません(クリーンアップすることをお勧めします)。

于 2013-02-28T18:54:41.203 に答える
0

開いているファイルへのポインタであると思われるinputfが変数を正しく読み取っているかどうかを確認してください。つまり、ファイルが正しく開いているかどうか、およびこのファイルに読み取りたいすべてのデータが含まれているかどうかを確認してください。

于 2013-02-28T18:49:49.200 に答える