Форум программистов, компьютерный форум CyberForum.ru

Не работает scanf в цикле - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.70
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
23.12.2011, 03:20     Не работает scanf в цикле #1
в коде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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); в надежде доп.очистки входного потока,
но мертвому эти припарки не помогли.
Вот уж не ожидал такую гадость в простой проге
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
23.12.2011, 03:29     Не работает scanf в цикле #2
попробуй убрать fflush и записать так
C
1
scanf("%d*c",&ip);
Добавлено через 2 минуты
кста строку 8 вообще убери
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
23.12.2011, 03:32     Не работает scanf в цикле #3
Как ни странно, но ваш код у меня спокойно запустился и работает. Отмеченной ошибки не обнаружено. Если надо могу переделать код в более приличный вид...
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
23.12.2011, 03:39  [ТС]     Не работает scanf в цикле #4
C++
1
scanf("%d*c",&ip);
Ничего не перепутали?? Что означает *с в спецификации формата???
Попробовал - все то же осталось. Если вот так
C++
1
scanf("%d%c",&ip);
то валится на вводе

Добавлено через 2 минуты
ответ darkknight
работаю в консольном C++ Builder типа С++
на других форумах чего только не советовали - и scanf_c и _fflush(stdin)
эти функции у меня не поддерживаются!!!
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
23.12.2011, 03:47     Не работает scanf в цикле #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
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) break;
  if (ip==1) fileDPF();
  if (ip==2) testDPF();
    } while (1);
  return 0;
}
Попробуй вот так. Еще есть вариант, что в функциях fileDPF, testDPF ты пишешь мимо массива(или т.п.) и этим самым гадишь стек вызова(и .т.п.).
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
23.12.2011, 03:49     Не работает scanf в цикле #6
Цитата Сообщение от eugrita Посмотреть сообщение
Ничего не перепутали??
нет
Цитата Сообщение от eugrita Посмотреть сообщение
Если вот так
а вот так не надо.
Цитата Сообщение от eugrita Посмотреть сообщение
на других форумах чего только не советовали - и scanf_c и _fflush(stdin)
эти функции у меня не поддерживаются!!!
и хорошо что не сработало, они ОС зависимые. Даже не знаю что сказать кроме как обратиться к документации компилятора. Я скомпилировал, запустил, работает. Может подскажет кто на венде работает.

Добавлено через 1 минуту
посмотрел бы дебагером...
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
23.12.2011, 03:51  [ТС]     Не работает scanf в цикле #7
Не помогло. По поводу функций testDPF() и FileDPF() - в них создается с помощью new 2-мерный
динамический массив. Причем delete[] там не стоит - работало и так.
Может в этом дело?
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
23.12.2011, 03:54     Не работает scanf в цикле #8
Цитата Сообщение от eugrita Посмотреть сообщение
Может в этом дело?
Ты закоментируй ВЕСЬ код в функциях и тогда проверь программу, а потом отпишись.
И вообще, выложи весь проект вместе с функциями(можно в архивчике).
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
23.12.2011, 03:57     Не работает scanf в цикле #9
eugrita, ставь breakpoint'ы и смотри в отладчике значение ip, сразу все прояснится

Добавлено через 1 минуту
может так поможет, хотя вляд ли.
C
1
scanf("%i[^\n]",&ip);
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
23.12.2011, 04:10     Не работает scanf в цикле #10
а можно вас попросить ради собственного любопытсва, скомпилировать и запустить следующее:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main()
{
  int choice;
  do {
  printf("\n1-iz faila,  2-test,   0- Vixod\n");
  scanf("%d",&choice);
  if(choice == 1){
      printf("PRINT IZ FAILA");
  } else if(choice == 2 ){
      printf("PRINT TEST");
  }
    } while (choice!=0);
  return 0;
}
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
23.12.2011, 04:19  [ТС]     Не работает scanf в цикле #11
ну вот заглушил обе функции т.е. добавил 1-м оператором return
сразу все стало нормально.
Выкладываю код. (правда delete[] сейчас дает сбой по памяти почему-то) (раньше без него обходился
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <stdio.h>
 #include <conio.h>
 #include <math.h>
 #include <alloc.h>
struct ShortComplex
{ //äëÿ èìèòГ*öèè êîìïëåêñГ*îãî Г·ГЁГ±Г«Г* (Г±ГЇГҐГЄГІГ°)
 double re, im;
};
 
void dpf2(float **x,ShortComplex **X, int L1,int L2)
{//âû÷èñëåГ*ГЁГҐ ïðÿìîãî äèñêðåòГ*îãî ïðåîáðГ*çîâГ*Г*ГЁГї Ôóðüå
 //ïðÿìûì ìåòîäîì. ×èñëî îïåðГ*öèé ïîðÿäêГ* N*N
  double t;
  for (int k1=0;k1<L1;k1++) {
    for (int k2=0;k2<L2;k2++)
       {
        X[k1][k2].re=0;X[k1][k2].im=0;
        for (int i=0;i<L1;i++)
           for (int j=0;j<L2;j++)  {
         t=2.*M_PI*i*k1/L1+2.*M_PI*j*k2/L2;
         X[k1][k2].re+=x[i][j]*cos(t); X[k1][k2].im+=x[i][j]*sin(t);
                                   }
       }
                        }
 
}
 
void testDPF()
{//ôîðìèðóåò òåñòîâûé âðåìåГ*Г*îé Г±ГЁГЈГ*Г*Г« x[i][j]=i åñëè i>L1/2,j>L2/2 äëÿ ÄÏÔ
//ГЁ âûïîëГ*ГїГҐГІ ÄÏÔ, ðåçóëüòГ*ГІ Гў Г¬Г*Г±Г±ГЁГўГҐ X
int L1,L2; //êîë-ГўГ® òî÷åê äèñêðåòèçГ*öèè ГЇГ® X ГЁ ГЇГ® Y
        return;
  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;
}
 
void fileDPF()
{//Г·ГЁГІГ*ГҐГІ òåñòîâûé âðåìåГ*Г*îé Г±ГЁГЈГ*Г*Г« x[i][j] ГЁГ§ ГґГ*éëГ*
 //ГЁ âûïîëГ*ГїГҐГІ ÄÏÔ, ðåçóëüòГ*ГІ Гў Г¬Г*Г±Г±ГЁГўГҐ X
      return;
 int L1,L2;
 FILE * f=fopen("dan.txt","r");
 if (f==NULL)
   {printf("faila dan.txt net\n"); return; };
 fscanf(f,"%i%i",&L1,&L2);
  if (L1<2 || L2<2)
    {printf("neverno L1 ili L2\n"); return; };
 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];}
  for (int i=0;i<L1;i++)  {
    for (int j=0;j<L2;j++)
    {
     if (i>=L1/2. && j>=L2/2.)x[i][j]=i;
     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("Re=%7.4f Im=%7.4f\n",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;
}
int main()
{//ГЈГ«Г*ГўГ*Г*Гї ïðîãðГ*ììГ* -âûçûâГ*ГҐГІ ГЇГ® âûáîðó ïîëüçîâГ*òåëÿ ïðÿìîå èëè îáðГ*ГІГ*îå ïðåîáðГ*çîâГ*Г*ГЁГҐ
 //ïðÿìîå äëÿ Г±ГЁГЈГ*Г*Г«Г* x[i]=i; //îáðГ*ГІГ*îå äëÿ
  int n,ip;
  printf("2-mernoe DPF\n");
  do {
  printf("\n 1-iz faila,  2-test,   0- Vixod\n");
  scanf("%d",&ip);
  if (ip==1) fileDPF();
  if (ip==2) testDPF();
    } while (ip!=0);
  return 0;
}
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
23.12.2011, 04:32     Не работает scanf в цикле #12
eugrita, попробуйте проделать сказанные мной манипуляции с функциями fscanf, scanf в функциях testDPF, fileDPF. return означает вернуть значение, т.е. ваши функции не выполняются, выход из них происходит сразу же после входа. Отсюда заключаем что гадится stdin именно в них. Оперторы new\delete это плюсовые операторы, а ваш код полностью написан на Си и в стиле Си. Читать его практически невозможно... а выравнивать долго, потому и не читал.
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
23.12.2011, 04:39  [ТС]     Не работает scanf в цикле #13
ответ alkogolik
Хоть и стиль C, scanf у меня единственный в главной проге. Ваш прием там не помог.
у меня правда почему-то ошибка на динамическом уничтожении
C++
1
2
3
for (int i=0;i<L1;i++)
     {delete x[i]; delete X[i];}
  delete[]x; delete []X;//здесь ошибка!!!
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
23.12.2011, 04:47     Не работает scanf в цикле #14
eugrita, я вам позже скажу почему ошибка. сейчас во время коррекции кода поправил
S_A_L
 Аватар для S_A_L
8 / 8 / 0
Регистрация: 22.12.2011
Сообщений: 14
23.12.2011, 04:57     Не работает scanf в цикле #15
Цитата Сообщение от eugrita Посмотреть сообщение
в коде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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); в надежде доп.очистки входного потока,
но мертвому эти припарки не помогли.
Вот уж не ожидал такую гадость в простой проге
Удалите из кода -- if ( ip == 0 ) continue;
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
23.12.2011, 05:15     Не работает scanf в цикле #16
читайте, пробуйте
код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
 
struct ShortComplex
{
     //для имитации комплексного числа (спектр)
     double re, im;
};
 
void dpf2(float **x, ShortComplex **X, int L1,int L2)
{//вычисление прямого дискретного преобразования Фурье
 //прямым методом. Число операций порядка N*N
    double t;
 
    for ( int k1 = 0; k1 < L1; ++k1 )
        for ( int k2 = 0; k2 < L2; ++k2 ) {
 
            X[ k1 ][ k2 ].re = 0;
            X[ k1 ][ k2 ].im = 0;
 
            for ( int i = 0; i < L1; ++i )
                for (int j = 0; j < L2; ++j) {
                    t = 2. * M_PI * i * k1 / L1+2. * M_PI * j * k2 / L2;
                    X[ k1 ][ k2 ].re += x[ i ][ j ] * cos( t );
                    X[ k1 ][ k2 ].im += x[ i ][ j ] * sin( t );
                }
        }
}
 
void testDPF()
{//формирует тестовый временной сигнал x[i][j]=i если i>L1/2,j>L2/2 для ДПФ
//и выполняет ДПФ, результат в массиве X
    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;
}
 
void fileDPF()
{//читает тестовый временной сигнал x[i][j] из файла
 //и выполняет ДПФ, результат в массиве X
    int L1, L2;
    FILE * f = fopen( "dan.txt","r" );
    if ( f == NULL ) {
        printf( "faila dan.txt net\n" );
        return;
    }
 
    fscanf( f,"%i%i", &L1, &L2 );
 
    if ( ( L1 < 2 )|| ( L2 < 2 ) ) {
        printf("neverno L1 ili L2\n");
        return;
    }
 
    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 ];
    }
 
    for (int i = 0; i < L1; ++i ) {
        for ( int j=0; j < L2; ++j ) {
            if ( ( i >= L1/2. ) && ( j >= L2/2. ) )
                x[ i ][ j ] = i;
            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( "Re=%7.4f Im=%7.4f\n", 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;
}
int main()
{//главная программа -вызывает по выбору пользователя прямое или обратное преобразование
 //прямое для сигнала x[i]=i; //обратное для
    int ip;
    printf("2-mernoe DPF\n");
    do {
        printf( "\n 1-iz faila,  2-test,   0- Vixod\n" );
        scanf( "%d", &ip );
        if ( ip == 1 )
            fileDPF();
        else if ( ip == 2 )
            testDPF();
    } while ( ip != 0 );
 
  return 0;
}
результат
Код
2-mernoe DPF

 1-iz faila,  2-test,   0- Vixod
2
L1=?, L2=?
5
2
x=
 0.000  0.000 
 0.000  0.000 
 0.000  0.000 
 0.000  1.000 
 0.000  1.000 

Spectr X
( 2.0000  0.0000) (-2.0000  0.0000) 
(-0.5000 -1.5388) ( 0.5000  1.5388) 
(-0.5000  0.3633) ( 0.5000 -0.3633) 
(-0.5000 -0.3633) ( 0.5000  0.3633) 
(-0.5000  1.5388) ( 0.5000 -1.5388) 

 1-iz faila,  2-test,   0- Vixod
0

Process returned 0 (0x0)   execution time : 17.293 s
Press ENTER to continue.
тест памяти
==21943== Memcheck, a memory error detector
==21943== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==21943== Using Valgrind-3.6.1-Debian and LibVEX; rerun with -h for copyright info
==21943== Command: ./plus
==21943==
2-mernoe DPF

1-iz faila, 2-test, 0- Vixod
2
L1=?, L2=?
3
5
x=
0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000 0.000
0.000 0.000 0.000 1.000 1.000

Spectr X
( 2.0000 0.0000) (-0.5000 -1.5388) (-0.5000 0.3633) (-0.5000 -0.3633) (-0.5000 1.5388)
(-1.0000 -1.7321) (-1.0827 1.2024) ( 0.5646 0.2514) (-0.0646 0.6146) ( 1.5827 -0.3364)
(-1.0000 1.7321) ( 1.5827 0.3364) (-0.0646 -0.6146) ( 0.5646 -0.2514) (-1.0827 -1.2024)
==21943== Mismatched free() / delete / delete []
==21943== at 0x4027919: operator delete(void*) (vg_replace_malloc.c:387)
==21943== by 0x8048A61: testDPF() (main.cpp:72)
==21943== by 0x8048DE7: main (main.cpp:143)
==21943== Address 0x42f90a8 is 0 bytes inside a block of size 20 alloc'd
==21943== at 0x4027F65: operator new[](unsigned int) (vg_replace_malloc.c:299)
==21943== by 0x8048873: testDPF() (main.cpp:46)
==21943== by 0x8048DE7: main (main.cpp:143)
==21943==
==21943== Mismatched free() / delete / delete []
==21943== at 0x4027919: operator delete(void*) (vg_replace_malloc.c:387)
==21943== by 0x8048A74: testDPF() (main.cpp:73)
==21943== by 0x8048DE7: main (main.cpp:143)
==21943== Address 0x42f90f0 is 0 bytes inside a block of size 80 alloc'd
==21943== at 0x4027F65: operator new[](unsigned int) (vg_replace_malloc.c:299)
==21943== by 0x804888E: testDPF() (main.cpp:47)
==21943== by 0x8048DE7: main (main.cpp:143)
==21943==

1-iz faila, 2-test, 0- Vixod
0
==21943==
==21943== HEAP SUMMARY:
==21943== in use at exit: 0 bytes in 0 blocks
==21943== total heap usage: 8 allocs, 8 frees, 324 bytes allocated
==21943==
==21943== All heap blocks were freed -- no leaks are possible
==21943==
==21943== For counts of detected and suppressed errors, rerun with: -v
==21943== ERROR SUMMARY: 6 errors from 2 contexts (suppressed: 17 from 6)

из теста видно что несмотря на работу программы где-то есть недочеты, бегло не заметил, вполне вероятно что стоит попробовать всю работу с память переписать в стиле Си. А по большому счету для этой программы использовать динамическую память не нужно. Подумайте сами, массив создается для выполнения расчета и тут же уничтожается, т.е. его не надо ни расширять и сужать... вполне себе можно сделать статический массив на стеке. В мейне или глобальный как бы по большому счету без разницы.
зы, я не переписывал код, я просто его выравнивал и по пути исправлял все что заметил. Потом скомилял и устранил все варнинги, ну а искать ошибки рантайма это уже ваша работа

Добавлено через 6 минут
Цитата Сообщение от eugrita Посмотреть сообщение
Хоть и стиль C, scanf у меня единственный в главной проге
а scanf и fscanf в функциях не в счет? вроде как stdin один на все задачи
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
23.12.2011, 05:30  [ТС]     Не работает scanf в цикле #17
удалил
C++
1
if (ip==0) continue;
не помогло.
В общем плюнул я на это дело. Убрал цикл do раз так
Теперь выполняется 1 раз с выбором по меню и завершается
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
23.12.2011, 05:34     Не работает scanf в цикле #18
Цитата Сообщение от eugrita Посмотреть сообщение
В общем плюнул я на это дело.
а вот это зря. Попробуйте все таки выделение\освобождение памяти переписать на Си, а в конце функций testDPF, fileDPF кинуть fflush().
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 405
23.12.2011, 05:38  [ТС]     Не работает scanf в цикле #19
интересный прием - тест памяти -никогда не был с ним знаком.
Как вы это делаете?

Добавлено через 3 минуты
Цитата Сообщение от alkagolik Посмотреть сообщение
а вот это зря. Попробуйте все таки выделение\освобождение памяти переписать на Си, а в конце функций testDPF, fileDPF кинуть fflush().
Ладно попробую. А сейчас спать - завтра к 9 -9.30 в УФМС за загранпаспортом бежать надо.
При такой жене как у меня особенно не распрограммируешься
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2011, 05:41     Не работает scanf в цикле
Еще ссылки по теме:

Не работает программа через printf и scanf C++
C++ Не работает if в цикле while
Условие в цикле do while работает не так, как ожидается C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
23.12.2011, 05:41     Не работает scanf в цикле #20
Цитата Сообщение от alkagolik Посмотреть сообщение
Попробуйте все таки выделение\освобождение памяти переписать на Си
вот тест на память после того как я переписал работу с памятью в Си
Код
==22332== Memcheck, a memory error detector
==22332== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==22332== Using Valgrind-3.6.1-Debian and LibVEX; rerun with -h for copyright info
==22332== Command: ./plus
==22332== 
2-mernoe DPF

 1-iz faila,  2-test,   0- Vixod
2
L1=?, L2=?
5
12
x=
 0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000 
 0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000 
 0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000 
 0.000  0.000  0.000  0.000  0.000  0.000  1.000  1.000  1.000  1.000  1.000  1.000 
 0.000  0.000  0.000  0.000  0.000  0.000  1.000  1.000  1.000  1.000  1.000  1.000 

Spectr X
(12.0000  0.0000) (-2.0000 -7.4641) ( 0.0000 -0.0000) (-2.0000 -2.0000) (-0.0000  0.0000) (-2.0000 -0.5359) ( 0.0000  0.0000) (-2.0000  0.5359) ( 0.0000  0.0000) (-2.0000  2.0000) ( 0.0000 -0.0000) (-2.0000  7.4641) 
(-3.0000 -9.2331) (-5.2430  3.4049) (-0.0000 -0.0000) (-1.0388  2.0388) ( 0.0000  0.0000) ( 0.0877  1.6728) (-0.0000 -0.0000) ( 0.9123  1.4049) (-0.0000 -0.0000) ( 2.0388  1.0388) (-0.0000 -0.0000) ( 6.2430 -0.3272) 
(-3.0000  2.1796) ( 1.8557  1.5028) (-0.0000  0.0000) ( 0.8633  0.1367) (-0.0000 -0.0000) ( 0.5973 -0.2293) ( 0.0000  0.0000) ( 0.4027 -0.4972) (-0.0000 -0.0000) ( 0.1367 -0.8633) (-0.0000  0.0000) (-0.8557 -2.2293) 
(-3.0000 -2.1796) (-0.8557  2.2293) (-0.0000 -0.0000) ( 0.1367  0.8633) ( 0.0000  0.0000) ( 0.4027  0.4972) ( 0.0000  0.0000) ( 0.5973  0.2293) (-0.0000 -0.0000) ( 0.8633 -0.1367) ( 0.0000  0.0000) ( 1.8557 -1.5028) 
(-3.0000  9.2331) ( 6.2430  0.3272) (-0.0000  0.0000) ( 2.0388 -1.0388) ( 0.0000 -0.0000) ( 0.9123 -1.4049) ( 0.0000  0.0000) ( 0.0877 -1.6728) (-0.0000 -0.0000) (-1.0388 -2.0388) ( 0.0000  0.0000) (-5.2430 -3.4049) 

 1-iz faila,  2-test,   0- Vixod
0
==22332== 
==22332== HEAP SUMMARY:
==22332==     in use at exit: 0 bytes in 0 blocks
==22332==   total heap usage: 12 allocs, 12 frees, 1,240 bytes allocated
==22332== 
==22332== All heap blocks were freed -- no leaks are possible
==22332== 
==22332== For counts of detected and suppressed errors, rerun with: -v
==22332== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 17 from 6)
==22332== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 17 from 6)
Yandex
Объявления
23.12.2011, 05:41     Не работает scanf в цикле
Ответ Создать тему
Опции темы

Текущее время: 08:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru