#c #data-manipulation
Вопрос:
У меня есть этот файл txt, в котором есть эти три номера «4.151120 4.100 7.9999». Я должен создать программу, которая прочитает его и выполнит с ними некоторые дальнейшие операции. Но я не могу
int main (int argc, char *argv[]){
FILE *arq;
arq = fopen("values.txt","r");
float num1, num2, num3;
fscanf(arq,"%.6f %.6f %.6f", amp;num1, amp;num2, amp;num3);
printf("%.6f %.6f %.6f", num1, num2, num3);
fclose(arq);
return 0;
Комментарии:
1. Как именно это «не работает»?
2. Похоже, единственная проблема в том, что вам нужно изменить
%.6f
значение%f
вfscanf
вызове, как в ответе Вонбранда.3. Никогда не используйте функцию scanf() без проверки кода возврата!
Ответ №1:
Это так же просто, как:
#include <stdio.h>
int main(void)
{
FILE *arq;
arq = fopen("values.txt", "r");
float n1, n2, n3;
if(fscanf(arq, "%f%f%f", amp;n1, amp;n2, amp;n3) != 3)
fprintf(stderr, "Something's wrongn");
else
printf("Numbers are %f, %f, %fn", n1, n2, n3);
fclose(arq);
}
Вам не нужно указывать точность (спорно при вводе), и если вы не хотите сопоставлять определенные строки между числами вместо разделения пробелами (по умолчанию), вы можете это исключить.
В качестве особого разрешения вы можете опустить return 0
«от main
«, это подразумевается здесь.
Комментарии:
1. Хороший совет насчет
return 0;
того, что линия не нужна.2. Это
.
неверно сscanf()
et al. Использование ширины может быть уместным, но обычно это не так. Это ограничивает количество непустых символов в числовом поле. Если бы код должен был использоватьсяO
, то первое считанное число было бы4.15
, а второе1120
-для образцов данных.
Ответ №2:
Один из подходов состоял бы в том, чтобы прочитать файл в виде строки, а затем обозначить строку пробелами. Для каждого токена вы можете отформатировать его как число. Я не знаю, лучший ли это способ сделать это на c, но это жизнеспособное решение.