-5
#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{    
    char *v= "a";
    char *o='e';
    char * w='i';
    char  *e='o';
    char  *l='u'; 
    char *u[1];

    printf  ("please enter your character\n");
    scanf  ("%c",& u); 

    if  (u == v){
        puts("the character is it a vowel\n");
    }
    if  (u == o) {
        puts("the character is it a vowel\n"); 
    }  
    else 
        puts("the character is  a constant\n");      
    system("PAUSE");    
    return 0;
}

ユーザー入力から母音を見つける際に正しい答えを得るために助けが必要です。

4

1 に答える 1

4

まず第一に、確かに受け取ったコンパイラの警告をすべて無視したことを恥じてください。それらは、あなたが「ばかげたこと」をするのを防ぐのに役立ちます。

そして、なぜこのすべてのナンセンスなのですか?これは、コンパイラが伝えようとしている最初の「愚かなこと」です。

char *v= "a";
char *o='e';     // invalid - Initializing a pointer to a constant 'e' (101).
char * w='i';    // invalid 
char  *e='o';    // invalid
char  *l='u';    // invalid

ポインタがどのように機能するか知っていますか? そうでない場合は、それらを読んで理解することをお勧めします。

最初の行は理にかなっています-文字列を作成し、char* vその文字列を指しています。

しかし、それらの文字や変数にポインタを使用しても意味がありません。それらを直接比較するだけです:

char my_character;
if (my_character == 'a') {
  // do something
}

また、文字の読み取りに関しては、意味をなさないときにポインターを使用しています。

char *u[1];   // why?

代わりに、単一のchar変数を定義するだけです。では、 のドキュメントを参照してくださいscanf"%c"「1文字だけ読みたい」という意味のフォーマット文字列を与える。次に、どこscanfに置くかを指定する必要があります。これを行うには、格納する変数の「アドレス」を渡します。(当然のことですが) operatorのアドレスを&使用してこれを行います。

char input_character;
scanf("%c", &input_character);

この情報があれば、作業を完了できるはずです。次に、switch ステートメントを調べることをお勧めします。

最後に、プログラマーとして真剣に受け止めてもらいたい場合は、一貫した書式設定 (インデント、スペース) を使用し、意味のある変数名を使用する必要があります無意味な変数に対して「母音」を綴るのは「かわいい」かもしれませんが、まったくナンセンスです。

最も重要なことは、コードの動作を正確に理解していない限り、コードを 1 行も書かないことですこれを行う場合は、誰にも助けを求めないでください (特に StackOverflow は避けてください)。あなたのコードが何をしているのか (または少なくとも何をすべきだと思っているのか) を説明できないなら、あなたのプログラムは動作する資格がありません。

于 2013-09-01T20:00:47.383 に答える