2016-07-15 96 views
4

我有以下程序可以輸入五個用戶輸入的名稱並將其打印出來。在C中,如何從多維數組中打印字符串?

我需要逐個詢問每個名稱,然後提示用戶打印名稱列表或添加其他名稱到列表中。名稱必須存儲在一個二維數組中,但我不明白爲什麼它不能用常規數組完成。

我的代碼接受沒有問題的名稱,但未能打印任何內容。它包括打印測試來監視錯誤發生的位置。測試編號6不打印,所以必須有問題printf("Name: %s", names[x][y]);

什麼是錯誤?

#include <stdio.h> 

    int main() { 
    int x; 
    int y; 
    char names[5][51] = {{'\0'},{'\0'}}; 

    printf("Enter the names: "); 
    for (x = 0; x <5; x++) { 
     printf("\nPrintTest 1"); 
     for (y = 0; y < 1; y++) { 
     printf("\nPrintTest 2"); 
      scanf("%50s",&names[x][y]); 
     } 
    } 
    printf("\nPrintTest 3"); 

    for (x = 0; x < 5; x++) { 
     printf("\nPrintTest 4"); 
     for (y = 0; y < 1; y++) { 
      printf("\nPrintTest 5"); 
      printf("Name: %s", names[x][y]); 
      printf("\nPrintTest 6"); 
     } 
    } 
} 

回答

3

因此,這裏是我的分析

你的錯誤:

事實上,你宣佈2D array其中每個xth指數基本上是char*

  • 如果使用names[x],它將得到char*指針在namesxth元素。
  • 如果使用names[x][y]它會得到在xth元素的指針,然後將訪問它的yth元素是一個字符,一個字符數據類型由%c%s打印。

可能的解決方案:

如果您想通過字符打印的數組的字符,那麼你就需要遍歷數組的大小是在您的案件51內循環,然後你就可以使用%c而不是%s來打印陣列。

或者您可以使用%s但是打印整個陣列,在這種情況下不需要內循環,因爲您將一次打印整個陣列。

更新的代碼:

方法#01:

//Iterating over all the char* 
for (x = 0; x < 5; x++) 
{ 
     printf("\nPrintTest 4"); 

     //Use of inner loop - Printing the arrays character by character 
     for (y = 0; y < 51; y++) 
     { 
      printf("\nPrintTest 5"); 
      printf("Name: %c", names[x][y]); 
      printf("\nPrintTest 6"); 
     } 
} 

方法#02:

//Iterating over all the char* 
for (x = 0; x < 5; x++) 
{ 
     printf("\nPrintTest 4"); 

     //Printing the arrays without the loop 
     printf("\nPrintTest 5"); 
     printf("Name: %s", names[x]); 
     printf("\nPrintTest 6"); 
} 

希望其明確的現在。

+0

感謝您對兩種方法的清晰解釋以及演示。 – Naltroc

+0

非常歡迎。我很高興你解決了你的問題:) –

3

你不需要在y嵌套循環:

char names[5][51]; 
printf("Enter the names: "); 
for (int x = 0; x <5; x++) { 
    printf("\nPrintTest 1"); 
    scanf("%50s", names[x]); 
    printf("\nPrintTest 2"); 
} 
printf("\nPrintTest 3"); 
for (int x = 0; x < 5; x++) { 
    printf("\nPrintTest 4"); 
    printf("Name: %s\n", names[x]); 
    printf("\nPrintTest 5"); 
} 
printf("\nDone.\n"); 

Demo.

相關問題