-3

これがコードです。問題は、プログラムがループを通過するときに、最初の単語が自動的に埋められることです。2. と 3. という単語 aaaa と bbbb を書くと、出力は次のようになります。

1 語:

2語:aaaa

3ワード:bbbb

 int main(){
      int i,n,g,d,count;
            char Vir[50][20] char temp[50];

printf("Juris Kondrats ||| 111RDB271 ||| 3.grupa ||| 3.variants\n");
printf("enter amount of words: \n");
scanf("%d", &g);
printf("you need insert 10 words max 10 words long\n",g);
printf("press enter");
getche();

system("cls");

for(i=0;i<g;i++)
{
     printf("\ninsertt %d-o word\n",i+1);
     gets(Vir[i]);

}      
....

助けてくれてありがとう!

4

1 に答える 1

0

この問題は、「Enter キーを押してください」プロンプトの後に入力ストリームに余分な文字が残っていることが原因である可能性が高いと思います。つまり、改行です。

clsシステム コマンドを発行しているため、Windows プラットフォームを使用していると思います。

したがって、「Enter」キーはキャリッジ リターンとライン フィード文字に変換されます。ここには 2 つの潜在的な問題があります。

scanf1 つ目は、整数の読み取りに使用することです。その後、ユーザーは ENTER を押す必要がありますが、それらの文字は入力から削除されません。ストリームに文字 (2 つ) があるため、「Enter キーを押してください」プロンプトをスキップしてスキップすることを期待しています。

1 つ目は によって削除されgetche()、2 つ目は最初の呼び出しに直行しgets、行末に到達したことを伝えます。したがって、ユーザーは空の文字列を入力しました。

とにかくそのような何か。

この問題を解決する不十分な方法は、「Enter キーを押してください」プロンプトのgets代わりにを使用getcheし、古い文字列領域に書き込むことです (とにかく結果を無視します)。これは良い解決策ではありませんが、この時点でより複雑なものを使用すると、混乱する可能性があります。

于 2012-12-16T23:11:49.973 に答える