簡體   English   中英

在C中打印數組元素時出現意外輸出

[英]Unexpected output when printing element of array in c

我正在創建一個簡單的C程序,以下程序的輸出應為2,但我得到50,不知道為什么(我是C的新手),請讓我知道我在哪里缺少

#include<stdio.h>
int main(int argc, char** argv) {
   int a[4]={'1','2','2','\0'};
   printf("The value of a is %d",a[1]);
   return 0;
}

這是實時輸出

您使用ascii字符代碼初始化了數組。 '2'具有整數值50。

初始化為

int a[4]={1,2,2,0};

如果您希望它包含整數1,2,2,0。 要么

#include<stdio.h>
int main(int argc, char** argv) {
   char a[4]="121";
   printf("The value of a is %c",a[1]);
   return 0;
}

如果您想要一個可以當作字符串的字符數組。 (請注意此處使用%c格式說明符。)

50是ASCII碼'2'

如果要修復,請將'2'替換為2

當使用字符文字(例如'2' C實際上將它們視為整數類型。 使用%d格式說明符進行打印時,您要告訴C將值打印為整數。

如果要保持這樣的數組元素: '2' ,則需要將printf格式更改為%c才能在控制台中得到2

當您寫int a[4]={'1','2','2','\\0'}; 您實際上是使用數字1和2的ASCII碼初始化數組的。這是因為您將它們括在單引號中,從而使它們成為字符而不是整數。 因此,數組實際上取值int a[4]={49,50,50,0};
要更正它,您應該編寫不帶引號的整數:

int a[4]={1,2,2,0};

還要注意,整數數組不需要以'\\0'結尾。 這僅適用於字符數組。

這條線

int a[4]={'1','2','2','\0'};

告訴編譯器創建一個長度為4的整數數組,並將右邊的花括號中的整數放入其中。

在字符C為1字節的整數, 1是的一個字符1 ,這意味着整數值的它的ASCII碼,即50。因此,一個陣列的第一元素獲得的50的值。

要解決你應該寫

int a[4]={1,2,2,0};

請記住, 0不能用作數組結束標記,因為它只是一個數字。

如果您想獲得122輸出,請執行

char a[4]={'1','2','2','\0'};
printf("The value of a is %s",a);

因為C中的字符串是帶有0作為終止符號的字符數組。

您也可以讓編譯器為您計算值

char a[]={'1','2','2','\0'};

您要分配的字符不是整數:

注意

'2' means char       use %c
 2  manes int        use %d
"2" means string.    use %s

都不同:

在您的代碼中,您可以喜歡打印2:

int main(int argc, char** argv) {
   char a[4]={'1','2','2','\0'};
   printf("The value of a is %c",a[1]);
   return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM