Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 10.12.2017
Сообщений: 76
1

Лишнее срабатывание цикла

08.12.2021, 22:27. Показов 786. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытался сделать так, чтобы при вводе символа не из массива lets просто выводило сообщение wrong и возвращало к началу цикла для новой попытки, и оно возвращает, но при этом якобы срабатывает лишний раз, не требуя ничего вводить.
Выглядит это так:

Код
Please input you char:  я
wrongPlease input you char:     wrongPlease input you char:

Почему так происходит и как это исправить? Сам код:

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
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
 
 
int main()
{
setlocale(0,"Russian");
 
char lets[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char userchar;
int i, a, b, c, warn = 0;
 
while (warn == 0){
 
printf("Please input you char:\t");
scanf("%c", &userchar);
 
for (i=0; i < 26; i++)
if (lets[i] == userchar) break;
if (i<26) {
        warn = 1;
 
int s = i;
 
while (s>=0) {
    for (a = s; a>=0; a--)
    printf(" ");
 
    for ( b = 0; b <= (i-s); b++)
        printf("%c", lets[b]);
 
    for ( c = b-2; c>=0; c-- )
        printf("%c", lets[c]);
 
 
printf("\n");
s--;
 
}
}
else
printf("wrong");
 
}
return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2021, 22:27
Ответы с готовыми решениями:

Лишнее срабатывание ColumnChanged при переходе по строкам в DataTable
Есть на форме элемент DevExpress.XtraTreeList.TreeList (или System.Windows.Forms.DataGridView)....

Множественное срабатывание цикла
Здравствуйте. При решении задачи возникла проблема, как я понял, связанная с через-чур большим...

Срабатывание программы в зависимости от времени без цикла и Sleep
Доброго времени. Код простой, раз в 4 часа в 1:58, 5:58, 9:58, 13:58, 17:58 и 21:58 выполняет...

составить блок-схему алгоритмов для решения задач с использованием трех циклов цикла с постусловием, цикла с предусловием и цикла с параметрами
помогите составить блок-схему алгоритмов для решения задач с использованием трех циклов цикла с...

удалите лишнее
удалите пожалуйста из программы методы расчета

4
из племени тумба-юбма
2480 / 1802 / 418
Регистрация: 29.11.2015
Сообщений: 8,745
Записей в блоге: 15
08.12.2021, 22:54 2
после строки#18 добавьте строку
C
1
while((getchar()) != '\n');
1
0 / 0 / 0
Регистрация: 10.12.2017
Сообщений: 76
08.12.2021, 23:42  [ТС] 3
А что делает эта строка?
0
2492 / 1093 / 488
Регистрация: 17.11.2018
Сообщений: 2,782
09.12.2021, 08:55 4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    char head = 'A', middle, n, ch;
 
    printf( "letter >  " );
    scanf( "%c", &middle );
 
    middle = toupper( middle );
    int spaces = middle - head;
    for( n = head; n <= middle; spaces--, n++ )
    {
        if( spaces )                     printf( "%*c", spaces, ' ' );
        for( ch = head; ch <= n; ch++ )  printf( "%c", ch );
        for( ch--; ch > head; )          printf( "%c", --ch );
        printf( "\n" );        
    }
    return 0;
}
0
Вездепух
Эксперт CЭксперт С++
12765 / 6647 / 1790
Регистрация: 18.10.2014
Сообщений: 16,805
09.12.2021, 09:11 5
Лучший ответ Сообщение было отмечено Varhin как решение

Решение

Цитата Сообщение от Varhin Посмотреть сообщение
Почему так происходит
Вы ввели два символа, а не один: букву и символ перевода строки. Вот два раза ввод и отрабатывает. Все как и должно быть. Почему вы считаете это лишним срабатыванием? Вы же сами нажали две клавиши на клавиатуре.

Цитата Сообщение от Varhin Посмотреть сообщение
и как это исправить?
Чтение символа сделать через

C
1
scanf(" %c", &userchar);
то есть именно с пробелом в форматной строке.
1
09.12.2021, 09:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2021, 09:11
Помогаю со студенческими работами здесь

Лишнее в автозагрузке
Сделала на ноуте рикавери, снова повыскакивали не нужные мне проги и в автозагрузке чёрт ногу...

Убрать лишнее
Здравствуйте, подскажите можно ли убрать(и как это сделать) то что я на скриншотах выделил красным?...

Лишнее копирование
class A { int data; double realData; public: A(double r, int d): data(d),...

Лишнее значение
И снова здравствуйте. Задача такова: программа должна отображать у левого края сплошной квадрат из...

лишнее в title
Вообщем суть такова - в title отображается название статьи+название рубрики+ название сайта - как...

Выводит лишнее
using namespace std; char EX; void m() { cout &lt;&lt; &quot;gfd&quot; &lt;&lt; endl; for (int i = 0; i &lt; 50...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru