#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, но мне не разрешено его использовать … есть идеи?