Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
georgfour
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 404
#1

Не работает scanf и getchar после циклов

27.04.2013, 21:00. Просмотров 1814. Ответов 11
Метки нет (Все метки)

Добрый день, проблема возникла следующая - функции гетчар и сканэф не вызываются после циклов for.
Если поставить эти функции до циклов, то все нормально, происходит ожидание ввода, ввод, дальнейшее выполнения программы. А вот если эти функции стоят после цикла или внутри него, то они просто напросто не работают, не происходит задержка для ввода.
В чем проблема?
заранее спасибо.

Добавлено через 19 минут
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
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<stdio.h>
 
#define M 54
#define N 4*M
 
void Init(int *a, int n)
{
   int i, j, b[M], count[M], len = M;
   for(i = 0; i < M; i++)
   {
      b[i] = i;
      count[i] = N / M;
   }
   for(i = 0; i < n; i++)
   {
      j = rand() % len;
      a[i] = b[j];
      --count[j];
      if (!count[j])
      {
         b[j] = b[len - 1];
         count[j] = count[len - 1];
         --len;
      }
   }
}
 
int main()
{
    int deck[N], bet[3][20], chi[4][20], pos=0, i=0, p=0, m=0, k=0,f=0,c=0;
    srand(time(NULL));
    Init(deck, N);
    
    while(pos!=311)
        {   
                
            for(p=0; p<3;p++)
                {
                    scanf("%d", &bet[p][0]);
                }
            
            for(m=0;m<2;m++)
                {   
                    if(m==1)
                        {
                            chi[3][0]=deck[pos];
                            pos++;
                        }
                    for(i=0;i<3;i++)
                        {
                            chi[i][m]=deck[pos];
                            pos++;
                        }
                    
                    
                }
            
            for(k=2;f!=1;k++)
                {
                    c=getchar();
                    if(c=='y')
                        {
                            chi[0][k]=pos;
                            pos++;
                        }
                    else 
                        {
                            f=1;
                        }
                }
                
            
        }
    
    
    
    getch();
}
вот сам код. не работает гетчар в цикле, который начинается с for(k=2;f!=1;k++), аналогично в этом же месте со сканомэф если на на него заменить гетчар
причем в самом первом вложенном цикле все прекрасно работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2013, 21:00
Ответы с готовыми решениями:

Цикл While и scanf/getchar
Проблема в следующем. Есть цикл. В нём предлагается нажать ту или иную кнопку....

Scanf(),getchar() не работают в функции
Здравствуйте по какой причине scanf(),getchar() программа не видит внутри...

Объясните на примере getchar putchar и scanf printf
В чём отличие...как я понимаю : getchar() - ввод чего угодно. putchar() -...

Не работает printf после циклов
Элементарная программа, перепечатанная из учебника Кернигана (только начал...

Не работает getchar()
Почему не работает getchar() и проверка? #include &lt;stdio.h&gt; #include...

11
PaDyra
32 / 32 / 25
Регистрация: 06.01.2012
Сообщений: 142
27.04.2013, 21:05 #2
Цитата Сообщение от georgfour Посмотреть сообщение
C
1
getch();
Попробуйте заменить этим
C
1
getchar();
0
georgfour
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 404
27.04.2013, 21:13  [ТС] #3
Нет, к сожалению, не помогло=(
0
easybudda
Модератор
Эксперт CЭксперт С++
10054 / 5974 / 1493
Регистрация: 25.07.2009
Сообщений: 11,321
27.04.2013, 21:13 #4
georgfour, в потоке ввода '\n' остаётся.
Объявите функцию
C
1
2
3
4
5
void flush_input(void) {
    char c;
    while ( scanf("%c", &c) == 1 && c != '\n' )
        ;
}
и вызовите после цикла.
1
georgfour
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 404
27.04.2013, 21:20  [ТС] #5
easybudda, и как мне это устранить ?
не знаю даже, как по другому ввод в цикле организовать.
0
PaDyra
32 / 32 / 25
Регистрация: 06.01.2012
Сообщений: 142
27.04.2013, 21:24 #6
с - тип int мне интересно как вы так сравниваете его с
C
1
if(c=='y')
Тем более для строк используют strcmp.
0
georgfour
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 404
27.04.2013, 21:26  [ТС] #7
Немного не понял, что эта функция делает, и после какого именно цикла ее вызывать =(

PaDyra, я просто постоянно менял типы, думая, что устранит проблему, а потом забыл обратно вернуть.
0
easybudda
Модератор
Эксперт CЭксперт С++
10054 / 5974 / 1493
Регистрация: 25.07.2009
Сообщений: 11,321
27.04.2013, 21:28 #8
Цитата Сообщение от PaDyra Посмотреть сообщение
с - тип int мне интересно как вы так сравниваете его с
C
1
if(c=='y')
Тем более для строк используют strcmp.
значение 'у' приводится к более широкому типу int без проблем, здесь всё нормально. А строки тут вообще не при чём.
0
Thinker
Эксперт С++
4232 / 2206 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.04.2013, 21:35 #9
замените
C
1
scanf("%d", &bet[p][0]);
на
C
1
2
scanf("%d", &bet[p][0]);
fflush(stdin);
а еще лучше
C
1
2
scanf("%d", &bet[p][0]);
fflush_input();
0
georgfour
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 404
27.04.2013, 21:50  [ТС] #10
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
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<stdio.h>
 
#define M 54
#define N 4*M
 
 
void flush_input(void) {
    char c;
    while ( scanf("%c", &c) == 1 && c != '\n' )
        ;
}
void Init(int *a, int n)
{
   int i, j, b[M], count[M], len = M;
   for(i = 0; i < M; i++)
   {
      b[i] = i;
      count[i] = N / M;
   }
   for(i = 0; i < n; i++)
   {
      j = rand() % len;
      a[i] = b[j];
      --count[j];
      if (!count[j])
      {
         b[j] = b[len - 1];
         count[j] = count[len - 1];
         --len;
      }
   }
}
 
int main()
{
    int deck[N], bet[3][20], chi[4][20], pos=0, i=0, p=0, m=0, k=0,f=0;
    int c;
    srand(time(NULL));
    Init(deck, N);
    
    /*while(pos!=311)
        {*/ 
                
            for(p=0; p<3;p++)
                {
                    scanf("%d", &bet[p][0]);
                    flush_input();
                }
            
            for(m=0;m<2;m++)
                {   
                    if(m==1)
                        {
                            chi[3][0]=deck[pos];
                            pos++;
                        }
                    for(i=0;i<3;i++)
                        {
                            chi[i][m]=deck[pos];
                            pos++;
                        }
                    
                    
                }
            
            for(k=2;f!=1;k++)
                {
                    c=getchar();
                    
                    if(c=='y')
                        {
                            chi[0][k]=pos;
                            pos++;
                            
                        }
                    if(c!='y')
                        {
                            f=1;
                        }
                }
            
            
        /*}*/
    printf("%d", chi[0][2]);
    
    
    getch();
 
}
сделал вот так вот, к сожалению, printf("%d", chi[0][2]); выводит постоянно число невнятное, плюс из цикла входит даже тогда, когда вводишь y =(
0
lowercase
212 / 201 / 85
Регистрация: 09.05.2012
Сообщений: 494
27.04.2013, 21:52 #11
была та же беда. тыц.
вот так будет проще всего:
C
1
scanf("%d%*c", &bet[p][0]);
0
georgfour
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 404
28.04.2013, 12:00  [ТС] #12
lowercase, гетчар срабатывает, но цикл почему-то не продолжается по условию.
0
28.04.2013, 12:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2013, 12:00

Как работает функция getchar?
Здравствуйте. Не совсем понимаю как работает функция getchar. Нашёл такое...

Не работает scanf
Здравствуйте! Необходимо описать массив структур и реализовать 4 функции:...

Не работает scanf
#include &lt;stdio.h&gt; int main() { char c; int d; ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru