0

私はこの問題にしばらく時間を費やしていて、誰かが私を助けることができるかどうか見るためにここに来ることに決めました。作成した特定のテキストファイルがあり、実行時にテキストファイルの内容をプログラムに送信しています。例:私が言うなら

    scanf("%d", &integerOne); 

次に、テキストファイルで最初の行(たとえば)の8をそのスロットに配置する必要があります。これをファイルの最後に到達するまで続けてほしいのですが、そこで問題が発生しています。

上記の例とは異なり、charsを使用しています。

    while((scanf("%s", userstring)) != EOF)
    {
            if(userstring[0] == 'c')
            {
                  scanf("%d", &cinput); 
            }
           if(userstring[0] == 'a')                       
           {        
                    scanf("%d", &cone);
                    scanf("%d", &cone);
           }
    }

背景として、配列「userstring」を「c」(接続の場合)または「a」(追加の場合)のいずれかを保持するようにしました。'char'入力を受け取らなくなったときに、プログラムをループやその他の関数で実行させようとしていました。あなたの洞察のすべては非常に役に立ちます。どうもありがとう、アレックス。

4

2 に答える 2

0

ループ内のscanfの1つでエラーが発生した場合、whileガードのscanfが(あなたの観点から)誤動作する可能性があります。

于 2013-03-08T21:49:44.690 に答える
0

scanf正常に照合および割り当てられた入力アイテムの数を返すため、戻り値がに等しいかどうかを確認することをお勧めし1ます。またscanf、このループ内の呼び出しは失敗する可能性があるため、入力が無効である可能性がある場合は、それらの戻り値も確認する必要があることに注意してください。

while (scanf("%s", userstring) == 1)
{
    if (userstring[0] == 'c')
    {
        if (scanf("%d", &cinput) != 1)
            return -1;                  // TODO: scanf failed
    }
    ...
}

そして実際の問題に答えるために:while常に別の文字列を入力するようにユーザーに促します。この読み取りを停止する唯一の方法は、入力の終わりの制御コードを入力することです。これは、Ctrl+ Z(Windowsの場合)またはCtrl+ D(Mac、Linuxの場合)です。 、Unix)。

于 2013-03-08T22:00:31.153 に答える