2014-01-28 4 views
-2

Мне было поручено создать программу, которая будет вводить число, и программа откроет файл и вернет строку для данного предложения. Вот текстовый файл, с которым я работаю.C программирование Как получить определенную строку строк из текстового файла?

billy 
bob 
james 
peter 
mike 
kieran 
obidiah 
scarlett 
john 
chloe 
sarah 
bob 
leon 
david 
andrew 
james 
shawn 
hannah 
peter 
phoebe 
chris 
john 
mark 
meg 

Теперь, я решил, что это было легче получить имя, получить значение счетчика и перепроектировать его оттуда, но я полностью застрял на том, как это сделать, может кто-нибудь помочь?

int main(int argc, char *argv[]) { 
    int count = 1; 

    char wd[20], word[20]; 

    FILE *fp; 

    fp = fopen("Names.txt", "r"); 
    if (fp == NULL) { 
     printf("given file doesn't exist"); 
     getch(); 
    } else { 
     printf("Name: "); 
     scanf("%s", word); 
     fscanf(fp, "%s", wd); 
     while (!feof(fp)) { 
      if (strcmp(word, wd) == 0) { 
       printf("%s found in the file. the given word is the %d word in the file", word, count); 
       count = 0; 
       break; 
      } else { 
       fscanf(fp, "%s", wd); 
       count++; 
      } 
     } 
     if (count != 0) { 
      printf("given word is not found in the file"); 
     } 
     getch(); 
    } 
} 

Это имя для строкового кода, я бы хотел, чтобы кол-во назвал код.

+1

перепроектирует? – Jori

+1

Вы сказали, что застряли в нем, но в чем проблема? Какой будет конкретный вопрос? – Abend

+0

"введите номер, и программа откроет файл и вернет строку для данного предложения." Почему вы просите имя? Вы должны попросить номер в соответствии с вашим описанием. –

ответ

0

fgets() читает строку из файла, поэтому, если вам нужна n-я строка (и вы уверены, что знаете максимальную длину строки в вашем файле), просто вызовите fgets() n раз. То, как вы решили, было проще, не легче и, похоже, не справляется с запрошенной задачей.

Чтение номер строки из командной строки так, чтобы не совсем соответствовать спецификациям вашего домашней работы, это:

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

#define MAX_BUFFER_SIZE 1024 


/* Parse the command line arguments */ 

int parse_cmd_line(int argc, char *argv[]) { 

    /* Check we have a single argument */ 

    if (argc != 2) { 
     printf("You must enter a single integral argument.\n"); 
     exit(EXIT_FAILURE); 
    } 


    /* Check that argument is an integer greater than zero */ 

    char * endptr; 
    int fline = strtol(argv[1], &endptr, 10); 
    if (*endptr || fline < 1) { 
     printf("You must enter a positive non-zero integral argument.\n"); 
     exit(EXIT_FAILURE); 
    } 

    return fline; 
} 


/* Trim trailing whitespace from a string */ 

char * trim_trailing(char * buffer) { 
    int idx = strlen(buffer) - 1; 
    while (idx >= 0 && isspace(buffer[idx])) { 
     buffer[idx--] = 0; 
    } 
    return buffer; 
} 


/* Main function */ 

int main(int argc, char *argv[]) { 
    int fline = parse_cmd_line(argc, argv); 

    FILE * infile = fopen("data.txt", "r"); 
    if (!infile) { 
     perror("Couldn't open data.txt"); 
     exit(EXIT_FAILURE); 
    } 

    int count = fline; 
    char buffer[MAX_BUFFER_SIZE]; 

    while (count-- > 0) { 
     if (fgets(buffer, MAX_BUFFER_SIZE, infile) == NULL) { 
      printf("There aren't that many lines in the file.\n"); 
      exit(EXIT_FAILURE); 
     } 
    } 

    fclose(infile); 

    printf("Line %d contains '%s'\n", fline, trim_trailing(buffer)); 

    return EXIT_SUCCESS; 
} 

выхода будет, с файлом данных:

[email protected]:~/Documents/src/scratch$ ./fileline 1 
Line 1 contains 'billy' 
[email protected]:~/Documents/src/scratch$ ./fileline 7 
Line 7 contains 'obidiah' 
[email protected]:~/Documents/src/scratch$ ./fileline 24 
Line 24 contains 'meg' 
[email protected]:~/Documents/src/scratch$ ./fileline 25 
There aren't that many lines in the file. 
[email protected]:~/Documents/src/scratch$ 
+0

Спасибо за помощь – user3227362

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