как создавать массивы из текстового файла C

#c #arrays #file #getc

#c #массивы #файл #getc

Вопрос:

Я получил текстовый файл с информацией: (100; 200;первый).Кто-нибудь может сказать мне, как разделить эту информацию на три массива: Min = 100, Max = 200 и Name =first. Я пробовал это с

c=getc(inp);

i=atoi(szinput);

но его чтение 10 в первый раз и 00 во второй … и так далее в цикле

c сохраняет 10, а не 1, поэтому я не могу получить правильную информацию для массивов…

Таким образом, в массиве Min хранится 1000, а не 100

Спасибо.

Ответ №1:

используйте scanf или fscanf вот так:

 scanf("(%d;%d;%[^)])",amp;min,amp;max,str);
  

Ответ №2:

Вы могли бы сделать что-то вроде следующего

 FILE *file;
char readBuffer[40];
int c;
file = fopen("your_file","r");
while ((c=getc(file))!= EOF)
{
    strcat(readBuffer, c);
    if( (char) c == ';')
  //this is the delimiter. Your min, max, name code goes here

}
   fclose(file);
  

Ответ №3:

Вот классный, простой учебник о том, как это сделать.

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

Также вы могли бы попытаться найти библиотеку, которая выполняет эту работу, я уверен, что для C есть много таких библиотек 🙂

Ответ №4:

Используйте strtok() :

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

int main() { 
  char input[] = "100;200;first";
  char name[10];
  int min, max;

  char* result = NULL;
  char delims[] = ";";

  result = strtok(input, delims);
  // atoi() converts ascii to integer.
  min = atoi(result);
  result = strtok(NULL, delims);
  max = atoi(result);
  result = strtok(NULL, delims);
  strcpy(name, result);
  printf("Min=%d, Max=%d, Name=%sn", min, max, name);
}
  

Вывод:

 Min=100, Max=200, Name=first
  

Комментарии:

1. не знаете, как я могу использовать это с длинными числами (с 13 цифрами) без длинного типа long, я должен ввести число и сказать, находится ли оно между 400000000000 и 49999999999, я нашел несколько ответов с long long int, но мне не разрешено его использовать … есть идеи?