-2

私は新しいメンバーです。そして今、私は演習を行っています:「文字列(100、101、102 ...)(文字数は無制限)を入力し、数値を配列に格納する」. 私の先生は私たちに機能を提供します。文字列中の数値を読み取るのがReadWordです。しかし、私にはまだ2つの問題があります。第1に、「for」ループで、「puts」コマンドを配置して配列の要素を出力すると、最後の要素を出力できません。また、「puts」コマンドを「for」ループの外に置くと、要素を出力できません。原因と直し方を教えてください。どうもありがとうございます!

#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();    
}
4

1 に答える 1

1

コードを試してみたところ、readword 関数が EOF を終了方法として認識していないことが確認されました。これを 10 (LF) に変更したところ、Enter キーが認識され、すべての数字が出力されるようになりました。問題は、getchar が期待どおりに EOF を処理しないことです。SO には、それについて語る例がたくさんあります。

また、ジョンの言うとおりです。他のいくつかのバグが浮かんでいて、それがあなたを悲しませます。

于 2013-03-16T17:01:59.220 に答える