Входной текстовый файл имеет несколько номеров в строке, цифры разделяются пробелом. Первые две строки получили только одно число, а следующие строки получили три. Я хочу прочитать каждую строку ввода и сохранить эти числа.как читать текстовый файл в c, а затем разделить каждую строку на токены?
Это то, что я получил до сих пор:
int
main(int argc, char *argv[]) {
int n = 0;
char buff[MAX_STRING_LEN]; //MAX_STRING_LEN is defined as 64
while (fgets(buff,MAX_STRING_LEN, stdin) != NULL) {
char temp;
if (n == 0) {
sscanf(buff, "%s", &temp);
int h_num = (int)temp;
} else if (n == 1) {
sscanf(buff, "%s", &temp);
int s_num = (int)temp;
} else {
sscanf(buff, "%s", &temp);
char *token;
token = strtok(&temp, " ");
int i = 0;
int a,b,c;
while (token != NULL) {
if (i == 0) {
a = (int)token;
token = strtok(NULL, " ");
} else if (i == 1) {
b = (int)token;
token = strtok(NULL, " ");
} else {
c = (int)token;
token = strtok(NULL, " ");
}
i++;
}
}
n++;
}
return 0;
}
Заявление для печати Я использовал, чтобы проверить свой код, как:
printf("%d\n",h_num);
printf("%d\n%d\n%d\n",a,b,c);
Я создал текстовый файл, как это:
23
34
4 76 91
но результат не тот, который я ожидал, это адрес указателя, который я думаю. (Я застрял с указателем снова =() Может кто-то помочь мне указать на то, что проблема? Цените это.
Почему вы не используете 'fscanf (fp,"% d ", & num)'? –
Было бы достаточно трех вызовов 'fscanf' с правильной строкой формата. Никаких петель, нет 'strtok', ничего сложного. –
У вашего кода много проблем. 'sscanf (buff,"% s ", &temp);' пытается сканировать строку в 'char', используя токен' a = (int); 'и т. д. –