2012-06-06 7 views
2

Как читать ввод из текстового файла? Входной файл имеет длину несколько строк, и каждая строка имеет формат city city distance, где есть два города и расстояние между ними.Как читать данные из текстового файла

Я пробовал несколько вещей, чтобы прочитать ввод, но, к сожалению, это не сработало. Мне нужно для анализа отдельных значений в каждой строке. (Каждая строка состоит из 2 названий городов и расстояния между ними.) Любая помощь будет оценена по достоинству.

data = fopen(argv[1],"r"); 
while(!EOF){ 

while(1){ 
    c=fgetc(data); 
    inname=(char**)malloc(sizeof(char*)); 
    if(c==' ') 
     mode++; 
    else if(c=='\n'){mode=0; 
     break;} 
    else { 
     switch(mode%3){ 
      case 0; 
       for(i=0;fgetc(data)!=' ';i++){ 
        if(inname[count]!=NULL) {count++;inname=(char**)malloc(sizeof(char*));} 
        inname[count][i]=fgetc(data);} 
       break; 
      case 1; 
       if(inname[count]!=NULL){ count++;inname=(char**)malloc(sizeof(char*));} 
       for(i=0;fgetc(data)!=' ';i++){ 
        inname[count][i]=fgetc(data);} 
       break;          
      /*case 2;for(i=0;fgetc(data)!='\n';i++){  
        dist[say]=atoi(str);}}}*/ 
       }}}count++;} 
       ` 

ответ

1

Я думаю, что вы должны изучить fscanf для чтения отформатированного ввода как это.

Чтобы прочитать строку, содержащую две строки и в Int, вы бы что-то вроде:

fscanf(data, "%s %s %d", &city1, &city2, &distance); 

Чтобы прочитать несколько строк до тех пор, EOF, код должен иметь следующий вид:

while(fscanf(data, "%s %s %d", &city1, &city2, &distance)!=EOF) { 
    /* rest of your logic here */ 
} 
+0

он работает для некоторых файлов, таких как .txt-файл –

+0

@MiribraStacker: он работает для текстовых файлов. – MAK

+0

U означает, что если я напишу что-то вроде 'while (! EOF) {while (1) {fscanf (data,"% s% s% d ", & city1 [i], & city2 [i], distance [i]) ;} i ++;} конечно, если все они являются двойными указателями –

Смежные вопросы