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

В цикле do-while не работает оператор !=

11.02.2015, 00:02. Просмотров 852. Ответов 5
Метки нет (Все метки)

Здравствуйте, форумчане Нарисовалась такая проблема: в общем, мы вводим строку (в данном случае это "пол") и хотим ограничить пользователя, чтобы, кроме "М" и "Ж", он больше ничего не ввел. Суть в том, что цикл не хочет работать с оператором !=. Помогите найти ошибку. Заранее спасибо.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <string.h>
 
int main(void)
{
    char sex[3], sexM[3]="m", sexJ[3]="j";
        do  {
            printf("Sex:");
            scanf("%s", sex);
        } while (strcmpi(sex,sexM) != 0 || strcmp(sex,sexJ) != 0); 
    return 0;
 
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2015, 00:02
Ответы с готовыми решениями:

Не работает вычитание в цикле
Вот программа должна (пока) отнимать от Х У, но делает только раз, хотя условие стоит &quot;while...

Не работает оператор ветвления
#include &lt;stdio.h&gt; #include &lt;conio.h &gt; void main() { char *list; char *log; int...

Не работает оператор break
Почему &quot;brake&quot; не работает?) #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;locale.h&gt; int...

Не работает оператор switch.
Привет всем. Реализую в программе кое-что при помощи оператора switch. Пересмотрел материал,...

Не работает оператор вывода
Здравствуйте. Я в недоумении. #include &lt;stdio.h&gt; void main() { int n=0, m=0, i=0, j=0, i1=0,...

5
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
11.02.2015, 00:14 #2
Лучший ответ Сообщение было отмечено Yumie как решение

Решение

Цитата Сообщение от Yumie Посмотреть сообщение
strcmpi(sex,sexM)
strcmpi надеюсь опечатка
Цитата Сообщение от Yumie Посмотреть сообщение
и хотим ограничить пользователя, чтобы, кроме "М" и "Ж", он больше ничего не ввел.
нук зачем тогда строка, достаточно одного символа
C
1
2
3
4
5
char sex;
  do  {
    printf("Sex:");
    scanf("%c", sex);
  } while (sex!='М' && sex!='Ж');
теперь по поводу твоей ошибки
strcmp возвращает 0 если строки равны и не ноль если не равны
смотрим что получается ввели М
strcmpi(sex,sexM) != 0 ЛОЖЬ
strcmp(sex,sexJ) != 0 ИСТИНА
ИСТИНА ИЛИ ЛОЖЬ даст ИСТИНА
цикл крутится
тебе нужно преписать так
или
C
1
strcmpi(sex,sexM) != 0 && strcmp(sex,sexJ) != 0)
или
C
1
strcmpi(sex,sexM) == 0 || strcmp(sex,sexJ) == 0)
1
Yumie
0 / 0 / 0
Регистрация: 08.12.2014
Сообщений: 16
11.02.2015, 00:23  [ТС] #3
Цитата Сообщение от ValeryS Посмотреть сообщение
нук зачем тогда строка, достаточно одного символа
Ну планируется в дальнейшем использование строки

Цитата Сообщение от ValeryS Посмотреть сообщение
теперь по поводу твоей ошибки
Благодарю, кажется, поняла свою ошибку. Невнимательность...
0
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
11.02.2015, 00:45 #4
Цитата Сообщение от Yumie Посмотреть сообщение
Ну планируется в дальнейшем использование строки
опасное это дело
Пользователь то ведь неорганизован то все в большом регистре введет, то вообще не в той ракладке, да и еще ошибок наделает, как все предусмотреть
если работать с символом то можно все 4 варианта (или даже 6) пописать
типа
C
1
2
3
4
5
6
c=='м' || // маленькая м "мужской"
c=='М' || // большая М "Мужской"
c=='v'  || // маленькая м в английской раскладке
c=='V'  || // большая М в английской раскладке
c=='M'  || // английское "мужской" "male"
c=='m'      // английское "Мужской" "Male"
Добавлено через 7 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
strcmpi(sex,sexM) == 0 || strcmp(sex,sexJ) == 0)
соврал ведь я
цикл будет крутится когда правильные значение введешь
нужно так
C
1
 while (!(strcmpi(sex,sexM) == 0 || strcmp(sex,sexJ) == 0));
0
easybudda
Модератор
Эксперт CЭксперт С++
10053 / 5973 / 1493
Регистрация: 25.07.2009
Сообщений: 11,312
11.02.2015, 17:47 #5
Цитата Сообщение от ValeryS Посмотреть сообщение
while (!(strcmpi(sex,sexM) == 0 || strcmp(sex,sexJ) == 0));

Не по теме:

"... Или, если хочешь, я скажу это проще" (с)


C
1
while ( strcmp(sex, sexM) && strcmp(sex, sexJ) );
0
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
11.02.2015, 18:31 #6
Цитата Сообщение от easybudda Посмотреть сообщение
while ( strcmp(sex, sexM) && strcmp(sex, sexJ) );
ну а я как сказал?
Цитата Сообщение от ValeryS Посмотреть сообщение
strcmpi(sex,sexM) != 0 && strcmp(sex,sexJ) != 0
0
11.02.2015, 18:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2015, 18:31

Объясните, как работает эта программа, а именно знак равенства (==) в цикле While
Всем привет! Извиняюсь за глупый вопрос, недавно начал учить Си. Объясните как работает это...

Java оператор if в цикле for
Что добавить в код чтобы программа заработала? import java.io.*; import java.util.*; public...

Не выполняется оператор в цикле
Не выполняется оператор realdn в цикле while при первом прохождение цикла не могу понять из за...


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

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

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