0

scanf を使用して if 句で使用する文字を取得できることは知っていますが、文字列でこれを行う方法はありますか?

例えば

printf("enter 'foo' to do 'bar', otherwise enter 'hay' to do 'wire');
scanf("%string", &stringNAME); //this is the part where I have no idea what to do

if (stringNAME == 'foo'){do bar} //here, issues occur with multicharacter character :/
if (stringNAME == 'hay'){do wire}
4

3 に答える 3

1

少し調整するだけで、ほぼ完成です。

char stringNAME[10];
printf("enter 'foo' to do 'bar', otherwise enter 'hay' to do 'wire');
scanf("%9s", stringNAME); 

if (!strcmp(stringNAME,"foo"){do bar}
if (!strcmp(stringNAME,"hay")){do wire}

scanf の数字 9 に注意してください。これは、入力文字列のサイズより 1 小さい (または小さい) 必要があります。そうしないと、厄介な問題であるバッファ オーバーフローが発生する危険があります。fgets文字数を制限する必要があるため、より適切な選択です。これはあなたがそれを行う方法です(scanf行を置き換えるだけです)

fgets(stringNAME, 10, stdin)
于 2012-12-10T23:52:45.353 に答える
0

%s 指定子を指定して scanf を使用して文字列を読み取ることができますが、必ず文字列を読み取っていることを確認してください (例: char 配列、動的に割り当てられた char* など...)。コードの残りの部分はわかりませんが、提供されたスニペットから、 &stringName が何であるか少し疑わしいです。

以下は scanf の使用例です。

char s[100];
scanf("%s", s);

そうは言っても、scanf を使用して文字列を読み取ることには注意してください。たとえば、上記の例では、複数単語の文字列を入力した場合、最初の単語のみが返されます。

scanf が必要だとわかっている場合は、問題ありません。それ以外の場合は、疑わしい場合は fgets を使用してください。

于 2012-12-10T23:53:34.307 に答える
0

文字列は char のベクトルであり、(str1 == str2) を比較すると、それらが同じメモリ アドレスにある場合に返されます。

if(strcmp(stringName, "foo") == 0){
//stringName is Foo
}

これはうまくいきます

于 2012-12-10T23:53:42.390 に答える