2016-11-27 6 views
-2

私はしようとしましたが、文字があったはずの整数があります。ご協力いただきありがとうございます。問題のある部分は13行目です。cの配列構造のメンバの文字を参照する方法は?

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

    typedef struct y{ 
     char name1[30]; 
     char name2[30]; 
    } y; 

    void x(y *array){ 
     int i; 
    for (i=0;i<2;i++) 
     printf("%d",array[i].name1[0]); /*<- Why is this integer?*/ 
    } 


    int main() 
    { 
     y array[2]={ 
      { "apple", "battle"}, 
      { "cup", "dog" }, 
      }; 

     x(array); 

     return 0; 
    } 
+1

文字を表示するには "%c"形式を試してください。または単に 'putchar' –

答えて

1

あなたがtype-specifier%dを使用しているので、これが起こっている、印刷に使用されていますprintfintの文字を印刷するには、タイプ指定子%cを使用する必要があります。

printf("%c",array[i].name1[0]); 
0

printf()に間違った書式指定子が使用されています。 printf("%d",array[i].name1[0]);を使用し、整数の印刷には%d形式指定子が使用されます。代わりにprintf("%c",array[i].name1[0]);を使用してください。

1

タイプcharのオブジェクトを文字として出力するには、フォーマット指定子%cを使用する必要があります。書式指定子%dをタイプcharのオブジェクトとともに使用する場合、その値は整数昇格後に整数値として解釈されます。

だから、配列name1の1つの文字が出力に

printf("%c",array[i].name1[0]); 

を書きます。例えば

for (i=0;i<2;i++) 
{ 
    for (int j = 0; array[i].name1[j] != '\0'; j++) 
    { 
     printf("%c",array[i].name1[j]); 
    } 
    printf("\n"); 
} 

または文字列として配列出力に

printf("%s",array[i].name1); 

を書き込みます。例えば

for (i=0;i<2;i++) 
    printf("%s\n",array[i].name1); 
1

printf("%d",array[i].name1[0]); /*<- Why is this integer?*/

あなたは(もフォーマット文字列として知られている)WRONG書式指定子を使用しているためだこと。フォーマット指定子は、印刷または読み取るデータのタイプを定義します。整数形式の指定子は%dです。文字の書式指定子が%cですので、あなたが代わりに書式指定子に、さらに読書のため

printf("%c",array[i].name1[0]) 

を使用しなければならないのに対し:Click here

0

%dスキャンコードは、あなたのケースになり、単一の文字印刷する%cスキャンコードを使用し、小数点符号付き整数に属して:また

printf("%c",array[i].name1[0]); 

を、あなたは内の余分なクローズ中括弧を持っていますあなたのコードの15行目。

関連する問題