2013-03-16 72 views
-2

我是新成員。現在,我正在練習:「輸入一串字符(100,101,102 ...)(字符數不限),並將數字存儲在數組中」。我的老師提供給我們一個功能。它是ReadWord讀取字符串中的數字。但我仍然有2個問題。第一,在「for」循環中,當我把「puts」命令打印出數組的元素時,我無法打印最後一個元素。如果我把「puts」命令放在「for」循環之外,我不能打印任何元素。請告訴我爲什麼以及如何修復它。非常感謝你!如何輸入字符串(100,101,102 .....)(字符數量無限制)並將數字存儲在數組中C

#include <stdio.h> 
#include <string.h> 
#include<conio.h> 
const int MAX_NUM_LEN = 7; 
const int MAX_LINE_LEN = 50; 

int IsComma(int ch) { 
return (ch == ','); 
} 
int ReadWord(char *num) { 
int ch, pos = 0; 
ch = getchar(); 
while (IsComma(ch)) 
    ch = getchar(); 
while (!IsComma(ch) && (ch != EOF)) { 
    if (pos < MAX_NUM_LEN) { 
    num[pos] = (char)ch; 
    pos++; 
} 
    ch = getchar(); 
} 
num[pos] = '\0'; 
return pos; 
} 

int main() 
{ 
int i,j; 
int count; 
char **ds; 
ds=new char *[50]; 
for (i=0;i<50;i++) ds[i]=new char [3]; 
char num[MAX_NUM_LEN + 1]; 
int numLen; 
    char line[MAX_LINE_LEN + 1]; 
    int lineLen = 0; 
    i=0;count=0; 
    for (;;) { 
     numLen = ReadWord(num); 
     if (numLen == 0) break; 
     strcpy(ds[i],num); 
    puts(ds[i]); 
     i++; 
} 
    j=i; 
    printf("\n %d",j); 
    for(i=0;i<j;i++) printf("%s ",ds[i]); 
    for(i=0;i<j;i++) delete ds[i]; 
    delete []ds; 
    getch();  
} 
+0

C?真? 'ds = new char * [50];'?另外,你最好通過'indent'來管理你的代碼,以免嘔吐。 – 2013-03-16 16:29:44

+0

將其重新標記爲C++。這不是C語法 – 2013-03-16 16:32:36

+2

請說出你輸入的內容,以及你看到的輸出內容。 '無法打印最後一個元素'不是很有幫助。你有一些錯誤,但最明顯的是'new char [3]'不夠大。 – john 2013-03-16 16:38:44

回答

1

我剛剛試過你的代碼,並確認readword函數不識別EOF作爲終止方法。我將它改爲10(LF),它現在識別輸入鍵並打印出所有數字。問題在於getchar並沒有像預期的那樣處理EOF。這裏有很多關於這個的例子。

此外,約翰是正確的,你有其他一些錯誤漂浮,會導致你的悲傷。

+0

感謝hvanbrug,在我將「EOF」改爲「10」之後,我解決了我的問題。非常感謝!! – 2013-03-17 00:02:24

+0

我的榮幸。 :)如果您對此表示滿意,請隨時將答案標記爲已接受。 – hvanbrug 2013-03-17 00:09:43

相關問題