C - Fgets & Scanf для чтения из текстового файла - PullRequest
0 голосов
/ 10 февраля 2012
#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

}

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

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

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

87654321

1234567811

12345678

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

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

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

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

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

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

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

  3. цикл до конца файла (а не <80, как в коде above) </p>

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

1 Ответ

1 голос
/ 10 февраля 2012

Попробуйте

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 ?! */
  }
}
...