Как реализовать чтение комплексных чисел из файла с помощью функции fscanf? Ну, или может какой-нибудь другой.
В файле числа записаны примерно так 5.35+i7.657
Комплексные числа (Чтение комплексных чисел из файла)
Модератор: Модераторы разделов
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
Re: Комплексные числа
не понял для чего они потом будут нужны, или просто нужно считать файл из чисел?!
-
impostor
- Сообщения: 103
- ОС: Ubuntu 9.04
Re: Комплексные числа
В файле записаны отсчеты сигнала, в виде комплексных чисел. И их надо будет обрабатывать в программе.
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Комплексные числа
Код: Выделить всё
char sign;
float x, y;
fscanf(fp, "%f%c%*c%f", &x, &sign, &y);
if (sign == '-')
y *= -1.0f;как то так, на ошибки не проверял - код писал сразу сюда.
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
Re: Комплексные числа
RasenHerz писал(а): ↑01.05.2009 17:18Код: Выделить всё
char sign; float x, y; fscanf(fp, "%f%c%*c%f", &x, &sign, &y); if (sign == '-') y *= -1.0f;
как то так, на ошибки не проверял - код писал сразу сюда.
Конечно думаю видя структуру файла, легче было бы всё понять.
Думаю перед fscanf нужно ещё добавить что-то типа
while(!feof(fp))
{
fread......
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Комплексные числа
кодировщик писал(а): ↑01.05.2009 17:29Конечно думаю видя структуру файла, легче было бы всё понять.
Думаю перед fscanf нужно ещё добавить что-то типа
while(!feof(fp))
{
fread......
fread не нужен, делаем просто так:
Код: Выделить всё
int main(int argc, char *argv[]){
FILE *fp = fopen("file.txt", "r");
char sign;
float x, y;
int r = 0;
if (!fp)
perror("fopen");
do{
r = fscanf(fp, "%f%c%*c%f\n", &x, &sign, &y);
if (sign == '-')
y *= -1.0f;
if (r == 3)
printf("x=%f; y=%f\n", x, y);
} while (!feof(fp) && r == 3);
}для файлов вида:
Код: Выделить всё
4.0+j7.657
5.35+j1.0
1-j12отрабатывает на ура:
Код: Выделить всё
negativ@negativ-zet:~$ ./a.out
x=4.000000; y=7.657000
x=5.350000; y=1.000000
x=1.000000; y=-12.000000
negativ@negativ-zet:~$-
impostor
- Сообщения: 103
- ОС: Ubuntu 9.04
Re: Комплексные числа
Спасибо огромное. А вот в последнем коде переменная r что означает?
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Комплексные числа
сколько переменных считано из строки.