2016-11-27 73 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,這是用來打印在printf函數中爲int,爲了打印字符,需要使用類型說明符%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的對象一起使用,則在整數提升後,其值將被解釋爲整數值。

所以寫

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

以輸出陣列name1的一個字符。例如

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?*/

這是因爲您使用了錯誤的格式說明(也稱爲格式字符串)。格式說明符定義了要打印或讀取的數據的類型。對於整數格式說明符是%d。儘管格式說明一個字符是%c,所以你必須改用

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

進一步閱讀的格式說明:Click here

0

%d掃描代碼屬於符號十進制整數,使用%c掃描代碼打印單個字符而你的情況應該是:

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

此外,你必須在一個額外的右大括號你的代碼的第15行。

相關問題