2016-06-29 16 views
0

私は以下のコードを実行しようとしています。scanfは第2引数を読み取っていません

私は、3つの異なる030間の最初の二つは整数で入力、そして第三に@から始まる文字列を取るためにscanf機能が欲しいです。

プログラムは正常にコンパイルされますが、座標とそれに関連する@シンボルを入力しようとすると、の座標の場所に0が表示されます。

これがなぜ起こっているのか、それを修正するために何ができるのか誰にも分かりますか?以下 コードあなたがXは、いくつかの単一文字の文字列、のため@ Xをentreringていると仮定すると、


#include <stdio.h> 

int main(){ 
    int grid[30][30]; 
    int i, j; 

    for(i=0; i<30;i++){  
     for(j=0; j<30;j++){ 
      grid[i][j]='.'; 
     } 
    }  

    int x_coord; 
    int y_coord; 
    char type[2]; 

    scanf("%d %d %s",&x_coord,&y_coord,type); 

    /*added extra whitespace*/ 
    printf("%i %i %s",x_coord,y_coord,type); 
    printf("\n"); 

    grid[x_coord][y_coord]=type[1]; 
    //end outer loop 

    for(i=0; i<30;i++){ 

     for(j=0; j<30;j++){ 
      printf("%c",grid[i][j]); 
     } 
     printf("\n"); 
    } 

    return(0); 
}//end main 
+0

として大きなアクセスしてXを得ることができます 'char型[2];' – BLUEPIXY

+2

あなたの入力は何ですか?そして、それはすべて1つの行にありますか?また、[mcve]を提供することをお勧めします。特に、これらのエラーを追跡するのは困難です。 –

+0

'scanf()'ファンクションファミリのいずれかを呼び出すときは、操作が成功したことを保証するために返された値(パラメータ値ではない)を常にチェックしてください。投稿されたコードでは、戻り値は3でなければなりません。他の値はエラーを示します。 '%s'書式指定子を使用するときは、常に、最大長修飾子(入力バッファの長さよりも1つ少ない) – user3629249

答えて

3

あなたはchar type[2];を宣言したので、あなたがchar type[3];このように宣言する必要がありますので、種類で、それはこの

type[0] = @

type [1]='\0'

のようになります、あなたは最初@を入力しているし、新しいキャラクターがXを想定したよう そのように

type[0] = @

type [1]='X'

type [2]='\0'

が、それはこのように保存されますし、必要に応じてtype [1]

1

で、scanf関数は、との種類を埋めるためにしようとしている「@」「X」と「\ 0 '(文字列の終わりを示すためにscanfでヌルバイトを加えたもの)

これは3バイトが2つ分の配列に格納されているためです。

関連する問題