2014-03-28 128 views
0

我正在嘗試使用scanf來讀取和打印字符數組。這是我的源代碼。我可以請知道這個代碼中的錯誤是什麼?如何使用scanf(而不使用字符串函數)讀取字符數組?

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

void main() 
{ 
    int i; 
    char str[20]; 
    printf("Enter\n"); 
    for (i=0; str[i] != '\0'; i++) 
     scanf("%s", &str[i]); 
    for (i=0; str[i] != '\0'; i++) 
     scanf("%s\n", str[i]); 
} 
+0

請你告訴我們,你做了什麼錯誤,當你運行該代碼? –

+1

提示:你的'char str [20]'是一個'char'數組,不是字符串 –

+3

我建議你閱讀一些基本的C書。 – haccks

回答

3

你必須至少三個問題:第一個是str字符串,而不是一個字符串數組,那會是例如

char str[20][20]; 

的第二個問題是,你顯然嘗試與scanf打印「弦」。

第三個問題是您在初始化時使用的數組str。局部變量是而不是已初始化,它們的值是不確定的。這意味着str的內容似乎是隨​​機的。使用未初始化的局部變量,就像您在第一個循環中那樣,會導致未定義的行爲。固定


一種方式的代碼(部分)也能像

char strings[20][20]; 

int i; 
for (i = 0; i < 20; ++i) 
{ 
    char *p = fgets(strings[i], sizeof(strings[i]), stdin); 
    if (p == NULL) 
     break; /* Error reading, or "end of file" */ 

    /* The fgets function can leave the newline in the buffer, remove it */ 
    if (strings[i][strlen(strings[i]) - 1] == '\n') 
     strings[i][strlen(strings[i]) - 1] = '\0'; 
} 

for (int j = 0; j < i; ++j) 
    printf("String #%d: '%s'\n", i + 1, strings[i]); 
+0

如何使用scanf以類似讀取「數組數組」的方式讀取「字符數組」?你能否在我的源代碼中建議修改。 – user3472728

+0

@ user3472728嘗試我的回答 –

+0

中的代碼,第四個問題是你還沒有訂購C編程書。 – AnthonyLambert

0
#include <stdio.h> 

int main(){ 
    int i; 
    char str[20][32]; 
    printf("Enter\n"); 
    for (i=0; i < 20; ++i) 
     scanf("%31s", str[i]); 
    for (i=0; i < 20; ++i) 
     printf("%s\n", str[i]); 
    return 0; 
} 

#include <stdio.h> 

int main(){ 
    int i, pos; 
    char *str[20]; 
    char array[20*32]; 

    printf("Enter\n"); 
    for (pos=i=0; i < 20; ++i){ 
     int len; 
     if(EOF!=scanf("%31s%n", &array[pos], &len)){ 
      str[i] = &array[pos]; 
      pos += len + 1; 
     } else { 
      str[i] = NULL; 
      break; 
     } 
    } 
    printf("\n"); 
    for (i=0; i < 20 && str[i] != NULL; ++i) 
     printf("%s\n", str[i]); 
    return 0; 
} 
相關問題