используя fscanf для чтения целого числа из файла - PullRequest
3 голосов
/ 30 июля 2010

gcc 4.4.4 c89

У меня есть следующий файл, который содержит имя, возраст и пол. Я пытаюсь читать в возрасте.

"Bloggs, Joe" 34 M

Я могу открыть файл успешно:

fp = fopen("input.txt", "r");
if(fp == NULL) {
    fprintf(stderr, "Failed to open file [ %s ]\n", strerror(errno));
    return 1;
}

И я пытаюсь читать в возрасте (34).

int age = 0;
int result = 0;
result = fscanf(fp, "%d", &age);

Однако, когда я пытаюсь распечатать результат, я всегда получаю ноль для возраста и результата.

Большое спасибо за любые предложения,

Ответы [ 2 ]

11 голосов
/ 30 июля 2010

Вы ничего не сделали, чтобы пропустить имя, поэтому он просматривает этот текст, пытается преобразовать его в целое число и терпит неудачу, поэтому возвращаемое значение равно 0 (0 преобразований выполнено успешно) и значение, которое было в переменнойостается неизменной.Вам нужно добавить код, чтобы пропустить имя, затем прочитать возраст:

fscanf(fp, "%*c%*[^\"]\" %d", &age);

Начальная "%c" читает начальную цитату."%[^\"]\" читает символы до (и включая) следующую цитату.В обоих случаях «*» означает, что значение будет прочитано, но нигде не сохранено.После этого мы можем прочитать число, используя «% d».

1 голос
/ 30 июля 2010

Формат вашей строки не просто одно число.Если вы хотите просто прочитать возраст, включите заголовок и поместите следующий текст над выражением fscanf.

int ch=0;
while(((ch=fgetc(stream)))!=EOF && !isdigit(ch)){}
ungetc(ch,stream);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...