2
#include <stdio.h>

int main(){
    char x;

    printf("enter something ");
    scanf("%c",&x);

    if(x == 's') char y[] = "sauve";

    else char y[] = "hi"

    printf("%s",y);
    getch();
}

「y」は最初に宣言されていません。私は配列が初めてです。私がしたいのは、ユーザーが文字 s を入力したときに文字列「suave」を表示することです。

4

5 に答える 5

4

好きなこと:

 char *y;
 if(x == 's') y = "sauve";
 else y = "hi";
 printf("%s",y);

それ以外の場合は、前に配列を使用strcpy()して宣言する必要があります:

 char y[SIZE] = "";       //1. sufficiently long size
 if(x == 's') 
      strcpy(y, "sauve"); //2. after declaration you can't assign used strcpy
 else 
     strcpy(y, "hi");
 printf("%s", y);        //3. now scope is not problem 
于 2013-08-01T14:47:59.753 に答える
2

代わりにこれを使用してください:

char *y;
if(x == 's') y = "sauve";
else y = "hi";

printf("%s",y);

yステートメント内ではなく前に宣言することで、スコープifを拡張しています。yそして、ここではブレースは必要ありません。


編集:(エリックとカールのコメントから)

if (x == 's') char y[] = "sauve";
else char y[] = "hi";

printf("%s",y); 

C 文法では、宣言はステートメントではありません。の構文ifif (expression) statement [else statement]. 中かっこのない if 内の単一の「ステートメント」は、ステートメントでなければなりません。宣言ではない場合があります。これは、ブレースで囲まれた block-item-listである複合文にすることができ、block -item-listは宣言であるか、宣言を含むことができます。

したがって、ここでの宣言は純粋に違法です。中括弧なしで宣言yすることはできません。if-statement

しかし、中括弧を追加すると:

if (x == 's') { char y[] = "sauve"; }
else { char y[] = "hi"; }

printf("%s",y); 

ここでは理論的には合法ですが、新しい問題があります... の宣言はスコープyにバインドされています。{ ... }タイプ : のエラーが行に表示error: use of undeclared identifier 'y'されprintfます。

于 2013-08-01T14:51:50.893 に答える
-1

を入れると、次のblocks {}ようになります。

#include<stdio.h>
    int main(){
    char x;

    printf("enter something ");
    scanf("%c",&x);

    if(x == 's') { char y[] = "sauve";}

    else {char y[] = "hi";}

    printf("%s",y); /* y is now out of scope of both its declarations*/
    getch();
   }

それは何が起こっているのかを説明していますか?

于 2013-08-01T14:47:29.100 に答える