2012-10-14 96 views
-1
#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 

void clearscreen() 
{ 
    system("cls"); 
} 

int main() 
{ 
    int b1,b,c; 
    char data[20];  
    int number,a; 

    printf("How many data do you want to store  "); 
    scanf("%d",&number); 

    for(a=1;a<=number;a++) 
    { 
        printf("Input your data No_%d:       ",a); 
        scanf("%s",&data[a]); 
    }      
    return 0; 
} 

我的問題是這樣的:在存儲數據後,你如何查看它? 例如,我存儲2個數據。 nxt是我想查看這2個數據。 有人可以給我一個示例代碼。如何查看存儲的字符串

+2

你沒讀過回答你剛纔的問題不夠好。數組索引從0開始,而不是從1開始。 – Mat

+0

兩個重要的事情不能回答你的問題:大多數編程語言(包括C)中的數組索引都以0開頭,所以它應該是for(a = 0; a 20)return 1;'的檢查 – stefan

+0

我在我的程序中改變了它..它仍然不起作用。 – JUB

回答

0

您的代碼不完全正確。您正在聲明一個長度爲20的字符數組,即一個長度爲20的字符串。在您的scanf中,您將寫入的偏移量a。你需要做的是delcare char類型的二維數組,然後讀入正確的字符數組,認爲這是一個例子:

char[20][20] data; 

for(int i = 0;i < 20;i++) 
    scanf("%s", &data[i][0]); 

此外,在你的循環,改變a=1a=0。如果沒有,你會循環number-1次。這是因爲,假設number=2,在第一個循環,測試(a<number)將成功。第二,a將增加到2,那麼測試將失敗,因爲a不小於number

1

你目前的代碼編譯,但它根本上是錯誤的:char是一種可以存儲單個字符,而不是整個字符串的類型。因此,&data[a]將指向先前使用的字符串的子字符串,每個後續的字符串覆蓋先前輸入的字符串的一部分。

不幸的是,在C字符串操作是遠遠複雜得多 - 你需要一個二維數組或指針數組正確地做你的任務:

char *data[20]; 
... 
for(a=1;a<=number;a++) 
{ 
    char buf[101]; 
    printf("Input your data No_%d:  ",a); 
    scanf("%100s", buf); // 100-char limit, no ampersand! 
    data[a] = malloc(sizeof(char)*(strlen(buf)+1)); 
    strcpy(data[a], buf); 
} 

現在,您就可以打印了:

for(a=1;a<=number;a++) 
{ 
    printf("Your data No_%d: is %s\n",a, data[a]); 
} 

最後,你需要釋放你已經分配的數據:您需要我們

for(a=1;a<=number;a++) 
{ 
    free(data[a]); 
} 
0

e字符串數組,以便每次讀取進入單獨的字符串。此代碼中還有多個其他清理工具 - 刪除未使用的變量,檢查輸入是否成功,驗證輸入,輸入時回顯數據(調試技術),輸入數據後回顯數據(另一種調試技術 - 但您通常使用只有一個),呼叫固定scanf()因爲它不指望一個指針數組等

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

int main(void) 
{ 
    char data[20][20]; 
    int number = -1,a; 

    printf("How many data do you want to store (1-20) "); 
    if (scanf("%d", &number) != 1 || number > 20 || number <= 0) 
    { 
     fprintf(stderr, "Invalid number: %d\n", number); 
     return(EXIT_FAILURE); 
    } 
    for (a=0; a < number; a++) 
    { 
     printf("Input your data No_%d:  ",a+1); 
     if (scanf("%19s", data[a]) != 1) 
     { 
      fprintf(stderr, "Oops: failed to read anything\n"); 
      return(EXIT_FAILURE); 
     } 
     printf("%2d: %s\n", a+1, data[a]); 
    } 

    for (a = 0; a < number; a++) 
     printf("Check %2d: %s\n", a+1, data[a]); 

    return 0; 
} 
+0

@ Jonathan我嘗試運行你的程序,輸入數據後就退出了。 – JUB