Разбор в конкретном номере - PullRequest
0 голосов
/ 06 марта 2011

Я понимаю, что это основной вопрос ... но я застрял на нем часами. Я немного новичок в C. Я пытался разобрать некоторые целые числа из текстового файла, расположенного определенным образом. Вот пример:

A 123,1

B 456,2 

N 980,2

Я хочу выбросить буквы и цифры после запятых. Следовательно, у меня было бы только 123, 456 и 980. Я застрял в первой части (выбрасывая буквы, и пробел между ними исказился :(). Я знаю, что было много сообщений это чем-то похоже, но я не могу получить его. Вот мой код (test.txt содержит входные значения).

int main(void)
{
    FILE *rFile = fopen ("test.txt", "rt");
    char input[20];

    if (rFile == NULL) {
        printf("Input file could not be located");
        return -1;
    }

    while (fscanf(rFile, "%s \n", input) > 0)
    {
     printf("%s", input);
    }
    fclose(rFile);

    return 0;
}

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

Ответы [ 3 ]

3 голосов
/ 06 марта 2011

scanf отлично работает для выборочного чтения только в части ввода.

int num;
scanf("%*c %d,%*d",&num);
printf("%d\n",num);

scanf игнорирует пробел перед %d и имеет звездочку в строке формата (например, в %*c и %*d) заставляет его читать и затем выбрасывать этот токен, освобождая нас от указания переменных для хранения частей ввода, которые нам не нужны.

2 голосов
/ 06 марта 2011

scanf и fscanf также могут анализировать отдельные символы и целые числа.Он игнорирует пробелы перед сущностями.

char c ;
int n1 ;
int n2 ;

// ...

while (fscanf(rFile, "%c %d,%d ", &c, &n1, &n2) > 0)
{
    printf("%d\n", n1);
}
0 голосов
/ 06 марта 2011

Если вы хотите загрузить целую строку текста, включая пробелы, вам, вероятно, лучше использовать fgets вместо fscanf.

char* fgets (char* stringBuffer, int numberOfCharacters, FILE* fileStream);

fgets продолжит чтениепока не будет выполнено одно из следующих условий:

  • Достигнута новая строка
  • Достигнут конец файла
  • Достигнуто количество символов (минус один)

Используя 20-символьный буфер строк в вашем примере, вы можете использовать что-то вроде этого:

while (fgets(input, 20, rFile)) {
  printf("%s", input);
}

Тем не менее, решение junjanes, вероятно, все еще лучше подходит для вашей конкретной задачи.

...