Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
Yumie
0 / 0 / 0
Регистрация: 08.12.2014
Сообщений: 16
#1

В цикле do-while не работает оператор != - C (СИ)

11.02.2015, 00:02. Просмотров 343. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос В цикле do-while не работает оператор != (C (СИ)):

Не работает вычитание в цикле - C (СИ)
Вот программа должна (пока) отнимать от Х У, но делает только раз, хотя условие стоит &quot;while (zal&lt;y);&quot; в чем проблема? #include...

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

Не работает оператор switch. - C (СИ)
Привет всем. Реализую в программе кое-что при помощи оператора switch. Пересмотрел материал, вроде все делаю правильно (там акцент...

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

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

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

5
ValeryS
Модератор
7007 / 5345 / 527
Регистрация: 14.02.2011
Сообщений: 18,038
11.02.2015, 00:14 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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
Модератор
7007 / 5345 / 527
Регистрация: 14.02.2011
Сообщений: 18,038
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Эксперт С++
10020 / 5943 / 1004
Регистрация: 25.07.2009
Сообщений: 11,230
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
Модератор
7007 / 5345 / 527
Регистрация: 14.02.2011
Сообщений: 18,038
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
Привет! Вот еще темы с ответами:

Не выполняется оператор в цикле - Pascal ABC
Не выполняется оператор realdn в цикле while при первом прохождение цикла не могу понять из за чего это происходит program Probel; ...

Оператор break в цикле и нарушение пошаговости - Pascal ABC
День добрый, уважаемые форумчане! Находимся с дочерью на начальном уровне изучения Паскаля :)) Спасибо данному форуму , очень помогает! ...

Условный оператор в цикле и после него - Pascal ABC
Даны вещественные числа х1, х2, ..., х10. Выяснить, верно ли, что количество тех из них, которые не больше 50,55, кратно четырем.

Найти произведение положительных элементов массива, используя оператор ветвления if else в цикле for - C++
Подскажите, пожалуйста. Не получается корректно вставить в цикл for оператор ветвления else к задачке &quot;Найти произведение положительных...


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

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

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