C - Fgets & Scanf для чтения из текстового файла

#include <stdio.h>

int main() {
FILE *f;
unsigned int num[80];
int i=0;
int rv;
int num_values;

f=fopen("values.txt","r");
if (f==NULL){
 printf("file doesnt exist?!\n");
 return 1;
}

while (i < 80) {
 rv = fscanf(f, "%x", &num[i]);

 if (rv != 1)
 break;

 i++;
}
fclose(f);
num_values = i;

if (i >= 80)
{
 printf("Warning: Stopped reading input due to input too long.\n");
}
else if (rv != EOF)
{
 printf("Warning: Stopped reading input due to bad value.\n");
}
else
{
 printf("Reached end of input.\n");
}

printf("Successfully read %d values:\n", num_values);
for (i = 0; i < num_values; i++)
{
 printf("\t%x\n", num[i]);
}

return 0
</stdio.h>

}

Получил код, указанный выше, из другого вопроса, но с его редактированием в соответствии с моими требованиями, каждый раз, когда я изменяю, он кажется ошибкой везде.

Это простое изменение.

Пример ввода из файла будет 12345678

87654321

1234567811

12345678

При чтении из файла с помощью этого метода беру каждую строку, когда я хочу, чтобы она взяла первые 8 шестнадцатеричных чисел и сохранила их.

Я попытался использовать fgets, чтобы получить строку, а не scanf, чтобы отформатировать ее, но ошибки просто выходят из-под контроля.

Идея, которая у меня была в голове, но просто не знаю, как ее реализовать: 1. Открыть файл

  1. fgets текущая строка

  2. scanf для форматирования текущей строки

    • Получение первых 8 цифр

    • Сохранение их в массив

  3. цикл до конца файла (а не <80, как в коде выше)

Я новичок в c и привык к java.

1 ответ

Пытаться

char buffer[201];
while (fgets(buffer, 200, f) != NULL)
{
 if (strlen(buffer) > 7)
 {
 buffer[8] = 0;
 sscanf(buffer, "%x", &num[i++]);
 }
 else
 {
 /* report that the line is error ?! */
 }
}

licensed under cc by-sa 3.0 with attribution.