1

このコードにはいくつか問題があります

stdin を介して .txt を読み取ろうとしています。具体的には、コンパイルするための手順は次のとおりです。

g++ eda.c -o eda.exe
./eda.exe < eda.txt

.txt ファイルの内容は次のとおりです。

3
[9.3,1.2,87.9]
[1.0,1.0]
[0.0,0.0,1.0]
print v3
incr v3 v1

最初の 4 行は今は関係ありません。これらの行は getline 命令で既に読み込まれています。ということで、質問は5行目「incr ...」から始まります。

その行では、次のような出力が期待されますprint!が、次のようになります。

print! print! print!

(と同じincr

incr読み取って開始するコードの特定の部分print: char mystring [20];

注: fgets() を使用して解決しました!

これは最終的なコードです:

do {
        //sscanf (mystring,"%s",str);
        //int res = strncmp(str, "incr", 10);
        if(mystring[0] == 'p') casenumber = 1;
        else if(mystring[0] == 'i') casenumber = 2;
        else if(mystring[0] == 'd' && mystring[1] == 'o') casenumber = 3;
        else if(mystring[0] == 'd' && mystring[1] == 'i') casenumber = 4;
        else if(mystring[0] == 'd' && mystring[1] == 'e') casenumber = 5;

        switch(casenumber)
        {
        case 1 :
            printf("print!\n" );
            break;
        case 2 :
            printf("increase!\n");
            break;
        case 3 :
            printf("dot!\n");
            break;
        case 4 :
            printf("distance!\n");
            break;
        case 5 :
            printf("decr!\n");
            break;
       default :
            printf("casenumber value is: %d\n", casenumber);
            break;
        }
        casenumber = 0;
    } while (fgets (mystring , 21 , stdin) != NULL);
4

1 に答える 1

0

scanf の結果を印刷しようとしましたか?

scanf は行を読み取らず、単純な文字列を読み取るため、コードは予想よりも多くループします。

その他の問題...

ループ内で実行するたびに変数をクリアします。

casenumber = 0;
memset(mystring, 0, sizeof(mystring));

そしてscanfの結果をテストします

if ( result == 1 )
    printf("sscanf error");
于 2013-10-17T18:06:51.673 に答える