в коде
int main()
{
int n,ip;
printf("2-mernoe DPF\n");
do {
printf("\n 1-iz faila, 2-test, 0- Vixod\n");
scanf("%d",&ip);
if (ip==0) continue;
if (ip==1) fileDPF();
if (ip==2) testDPF();
fflush(stdin);
} while (ip!=0);
return 0;
}
я рассчитывал на выход из цикла при вводе ip=0 (стандартное меню консольных программ)
Но получается фигня: 2й, 3й и следующие разы scanf просто не работает.
Т.е. значение ip остается=значению 1-го ввода. Естественно цикл крутится до бесконечности.
Наученный горьким опытом вставил fflush(stdin); в надежде доп.очистки входного потока,
но мертвому эти припарки не помогли.
Вот уж не ожидал под старость такую гадость в простой проге Только не надо советовать всякие scanf_c, и
scanf("%i*c",&ip)
Добавлено через 57 минут и 48 секунд:Сразу хочу ответить. Дело видимо в порче стека функциями testDPF(), fileDPF()
там внутри объявлены 2-мерные динамические массивы.
При заглушке этих функций все работает ОК void testDPF()
{
int L1,L2; //êîë-âî òî÷åê äèñêðåòèçàöèè ïî X è ïî Y
printf("L1=?, L2=?\n");scanf("%i%i",&L1,&L2);
float **x; ShortComplex **X;
*x=new float[L1]; *X=new ShortComplex[L1];
for (int i=0;i<L1;i++)
{x[i]=new float[L2]; X[i]=new ShortComplex[L2];}
printf("x=\n");
for (int i=0;i<L1;i++) {
for (int j=0;j<L2;j++)
{
if (i>=L1/2. && j>=L2/2.)x[i][j]=1;
else x[i][j]=0;
printf("%6.3f ",x[i][j]);
}
printf("\n");
}
dpf2(x,X,L1,L2); printf("\nSpectr X\n");
for (int i=0;i<L1;i++) {
for (int j=0;j<L2;j++)
{printf("(%7.4f %7.4f) ",X[i][j].re,X[i][j].im);}
printf("\n");
}
for (int i=0;i<L1;i++) //строки добавлены позже
{delete x[i]; delete X[i];} //строки добавлены позже
delete[]x; delete []X; //а здесь вообще валится по сбою памяти
}
[\code]