Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2014, 18:34   #1
Дмитрий Огнев
Пользователь
 
Регистрация: 25.03.2014
Сообщений: 18
По умолчанию Программа написано верно, но почему-то не работает (на Си)

Написал прогу, кампилятор на нее не ругается. Запускаю, но правильно она не работает.

Задание:Написать функцию, которая возвращает True, если символ, полученный функцией в качестве аргумента, является согласной буквой русского алфавита.

Код:
#include "stdafx.h"
#include <conio.h>
#include <iostream>
using namespace std;

int flag(char s)
{
	int k=0;
	if (s == 'б' || s == 'в' || s == 'г' || s == 'д' || s == 'ж' || s == 'з' || s == 'к' || s == 'л' || s == 'м' || s == 'н' || s == 'п' 
        || s == 'р' || s == 'с' || s == 'т' || s == 'ф' || s == 'х' || s == 'ц' || s == 'ч' || s == 'ш' || s == 'щ') k = 1;
	return k; 
}
int main(int argc, char* argv[])
{
	char s;
	cout << "Vvod" << endl;
	cin >> s;
	if (flag(s)==1) cout << "True";
	else cout << "False";
	system("PAUSE");
	return 0;
}

Последний раз редактировалось Stilet; 29.04.2014 в 21:12.
Дмитрий Огнев вне форума Ответить с цитированием
Старый 29.04.2014, 18:55   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Кодировка текста в исходнике и при вводе в консоли не совпадают. Исходник, скорее всего, имеет кодировку CP1251, а ввод в консоли происходит в CP866. Забейте коды букв - кодировка. Используйте unsigned char на всякий случай. Или попробуйте поиграться с setlocale и chartooem.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 29.04.2014 в 18:59.
BDA на форуме Ответить с цитированием
Старый 29.04.2014, 18:59   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

1. Операдны логических выражений должны заключаться в скобки:
Код:
if ((a == b) || (c == d))
2.
вот этого уродства:
Код:
if (s == 'б' || s == 'в' || s == 'г' || s == 'д' || s == 'ж' || s == 'з' || s == 'к' || s == 'л' || s == 'м' || s == 'н' || s == 'п'
          || s == 'р' || s == 'с' || s == 'т' || s == 'ф' || s == 'х' || s == 'ц' || s == 'ч' || s == 'ш' || s == 'щ') k = 1;
быть не должно.
используйте другие средства. Например, составьте строку из идущих подряд согласных букв и проверяйте символ на вхождение в эту строку.

3. Пусть ваша функция возвращает логическое значение (bool)

Последний раз редактировалось Stilet; 29.04.2014 в 21:12.
Вадим Мошев вне форума Ответить с цитированием
Старый 29.04.2014, 18:59   #4
ATL
Форумчанин
 
Аватар для ATL
 
Регистрация: 26.01.2007
Сообщений: 278
По умолчанию

И проще перебрать гласные. Их поменьше.
ATL вне форума Ответить с цитированием
Старый 29.04.2014, 19:02   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Вадим Мошев, "==" имеет больший приоритет, чем "||".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 29.04.2014, 19:02   #6
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от ATL Посмотреть сообщение
И проще перебрать гласные. Их поменьше.
А если в качестве аргумента передана не буква? Например, число или символ?

Цитата:
Сообщение от BDA Посмотреть сообщение
Вадим Мошев, "==" имеет больший приоритет, чем "||".
спасибо
Вадим Мошев вне форума Ответить с цитированием
Старый 29.04.2014, 20:08   #7
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Кстати, гласных гораздо меньше, чем согласных.

Если бы задача была " TRUE , если буква не Ы , FALSE - если Ы " - стали бы перечислять 32 буквы ?
type_Oleg вне форума Ответить с цитированием
Старый 29.04.2014, 20:19   #8
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Кстати, гласных гораздо меньше, чем согласных.

Если бы задача была " TRUE , если буква не Ы , FALSE - если Ы " - стали бы перечислять 32 буквы ?
Здесь я бы вывел на экран результат операции сравнения: letter != 'Ы'
Вадим Мошев вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не работает программа? blacktener Общие вопросы C/C++ 5 09.09.2013 09:37
Почему не работает программа? forged Паскаль, Turbo Pascal, PascalABC.NET 1 12.03.2013 17:40
почему не работает программа? Miles Помощь студентам 1 20.12.2011 20:19
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56
Почему не работает программа? St1mkA Помощь студентам 3 07.04.2010 19:51