2017-06-08 16 views
0

私はcを新しくしましたが、タイピングゲームを作成しようとしています。しかし、ifステートメントは機能せず、出力は「非ゼロステータス "。問題は、IDEによって原因である可能性があります、私はそれを把握することはできません、ありがとう。C ifステートメントError:ゼロ以外のステータスで終了しました

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main (void) 
{ 
    char start; 
    printf ("here is a typing game\n"); 
    printf ("type any key to start\n"); 
    scanf ("%c", &start); 
    void game() 
    { 
    int i; 
    char answer; 
    char type[20]; 
    { 
     for (i = 0; i < 20; i++) 
     { 
     printf ("%c", 'a' + (random() % 26)); 
     } 
    } 
    scanf ("%s", answer); 
    if (strcmp(answer,type) == 0) 
    { 
     printf ("good\n"); 
    } 
    else 
    { 
     printf ("so bad\n"); 
    } 
    } 
    game(); 
} 
+0

scanf( "%s"、&answer); –

+0

Cでは、別の関数(この場合は 'main')の中で関数(この場合は' game')を定義することはできません。詳細については、Cマニュアルを参照してください。 – lurker

答えて

1

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

  1. あなたは(あなたがmainで定義されたgameを持っているように)別の関数内の関数を持つことはできません。

  2. answerはそうあなたがラインscanf("%c", &answer);を使用する必要がscanfでそれを読むために、文字列単一char、ではない - 、それが何であるかをあなたが望んでいたことは、単一の文字を読むことだった場合。残りのコードからは、answerを文字列にすることが意図されているようですので、答えはchar [20]の配列になるように宣言し、フォーマット指定子を使用してscanfと呼び出してください。

  3. strcmpを使用して、charと文字列を比較することはできません。 strcmpは、文字列を文字列と比較したり、文字列を文字列に比較したり、文字を文字と比較するためのものではありません。さらに、コード内のどこにでも配列typeに文字列を割り当てることは決してありません。

+0

ありがとうございます。私は問題を解決します –

0
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

void game(); 

int main (void) 
{ 
    char start; 

    srand(time(NULL));//seed rand function with time to generate "near to pseudo random numbers"(note: This is not "really" pseudo anyways!) 
    printf ("here is a typing game\n"); 
    printf ("type any key to start\n"); 
    scanf("%c",&start); 
//define your function outside main 
    game();//call your function here 
} 
void game() 
    { 
    int i; 
    char answer[20];//answer should also be an array 
    char type[20]="";//initialize type this way to avoid unnecessary characters initialization 

    { 
     for (i = 0; i < 19; i++)//should be 19 not 20... Last character has to be null 
     { 
     printf ("%c", type[i]='a' + (rand() % 26));//You forgot to add the random characters in type array and 
                //rand should be called this way 

     } 
    } 
    scanf ("%s", answer); 
    if (strcmp(answer,type) == 0) 
    { 
     printf ("good\n"); 
    } 
    else 
    { 
     printf ("so bad\n"); 
    } 
    } 

提案:即興はまだ入力で解答配列のオーバーフローを関数fgetsを使って入力を取る()やscanfないと管理のように、なされるべきです。

+0

'type'はヌルで終了する必要があり、またOPのコードと同様に' game'関数は 'main'関数内で始まります。 –

+0

'type'の最後の要素は、明示的に' \ 0'と宣言しない限り、未だ初期化されていません。 –

+0

@GovindParmar NULLのascii値は0です。私はすでにそれを初期化しています。 char型[20] = ""; printf( "%d"、type [0])を追加します。型arrayの宣言の直後に出力として0が返されます。 –

関連する問題