Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Программа работает не правильно, в чём ошибка?  (Прочитано 3558 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн maxprig

  • Автор темы
  • Любитель
  • *
  • Сообщений: 91
    • Просмотр профиля
Программа компилируется без проблем, запускается но не выдаёт нужного значения.
Т.е если ввести "1" и любое другое, выдаст "Не знаю :("
Где может быть ошибка?
#include<iostream>
#include<stdio.h>
using namespace std;
main()
{
int a;
cout << "Введите 1, 2 или 3!\n";
scanf ("%d", &a);
switch(a)
{
case '1': printf("Один\n"); break;
case '2': printf("Два\n"); break;
case '3': printf("Три\n"); break;
default: printf("Не знаю :(\n");
}
getchar();
}
Компилятор g++

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
а чего вы в switch значения case в одиночные ковычки берете ? надо просто:
switch(a)
{
case 1: printf("Один\n"); break;
case 2: printf("Два\n"); break;
case 3: printf("Три\n"); break;
default: printf("Не знаю :(\n");
}
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн maxprig

  • Автор темы
  • Любитель
  • *
  • Сообщений: 91
    • Просмотр профиля
Спасибо, действительно из за кавычек.
А ставил по примеру из учебника))

С символами так же нужно делать?
« Последнее редактирование: 28 Июня 2012, 18:54:00 от nyan »

shame

  • Гость
Символы как раз в кавычки ставят

Оффлайн maxprig

  • Автор темы
  • Любитель
  • *
  • Сообщений: 91
    • Просмотр профиля
В таком случае выдаёт слудующее
Цитировать
123.cpp:11: warning: multi-character character constant
123.cpp:12: warning: multi-character character constant
123.cpp:13: warning: multi-character character constant
123.cpp: In function ‘int main()’:
123.cpp:11: warning: case label value exceeds maximum value for type
123.cpp:12: warning: case label value exceeds maximum value for type
123.cpp:13: warning: case label value exceeds maximum value for type
Код такой
#include<iostream>
#include<stdio.h>
using namespace std;
main()
{
char c;
cout << "Введите первую букву\n";
scanf ("%c", &c);
switch(c)
{
case 'а': printf("ааа\n"); break;
case 'б': printf("ббб\n"); break;
case 'в': printf("ввв\n"); break;
default: printf("Не знаю :(\n");
}
getchar();
}
Буквы русские

Оффлайн Кровавый

  • Старожил
  • *
  • Сообщений: 1626
  • Логика творит чудеса!
    • Просмотр профиля
Либо
char c[1];
scanf("%c", &c);
Либо (посимвольный ввод)
char c;
getchar(c);


PS, getchar() и scanf() - это С, а не С++. В С++ используется cin и cin.get().

Пользователь решил продолжить мысль 28 Июня 2012, 21:46:21:
И не printf(), а cout. Получается, что вы пишете на Си++, а используете библиотеку из Си и компилируете компилятором для С++. Ну и пишите тогда на чистом Си. :)
« Последнее редактирование: 28 Июня 2012, 21:46:21 от Кровавый »
Железо: AMD FX8350 4.2Ghz + 2x4Gb Kingston HeyperX + Asus M5A97 R2.0 + HDD WD WZ10EZEX 1TB 7200 rpm + SSD 128 GB + Win 10 x64.

Оффлайн VlaoMao

  • Активист
  • *
  • Сообщений: 308
  • ArchLinux - eMachines e725 && Nokia N950
    • Просмотр профиля
PS, getchar() и scanf() - это С, а не С++. В С++ используется cin и cin.get()
И что в этом плохого? Религия Ъ?

Оффлайн Кровавый

  • Старожил
  • *
  • Сообщений: 1626
  • Логика творит чудеса!
    • Просмотр профиля
PS, getchar() и scanf() - это С, а не С++. В С++ используется cin и cin.get()
И что в этом плохого? Религия Ъ?


Как минимум, это не правильно. Ровно, что во Writer текст выравнивать пробелами по центру. ;-)
Железо: AMD FX8350 4.2Ghz + 2x4Gb Kingston HeyperX + Asus M5A97 R2.0 + HDD WD WZ10EZEX 1TB 7200 rpm + SSD 128 GB + Win 10 x64.

Оффлайн Olej

  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
В таком случае выдаёт слудующее
Цитировать
123.cpp:11: warning: multi-character character constant
123.cpp:12: warning: multi-character character constant
123.cpp:13: warning: multi-character character constant
123.cpp: In function ‘int main()’:
123.cpp:11: warning: case label value exceeds maximum value for type
123.cpp:12: warning: case label value exceeds maximum value for type
123.cpp:13: warning: case label value exceeds maximum value for type
правильно выдаёт:
- буквы русские, кодировка UTF-8, литеры занимают по 2 байта и никак в char не влазят ;)
- можете использовать вместо char такие типы (из С) как wchar (UTF-32 - 4 байта на символ), или mbchar (UTF-8 - символы переменной длины)...
- а лучше практикуйтесь на латинских символах.
 

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Чистый С - хорошо, С++ плохо (это мягко сказано) :)

Оффлайн arrecck

  • Старожил
  • *
  • Сообщений: 1725
    • Просмотр профиля
это в каком учебнике такие примеры?

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
это в каком учебнике такие примеры?
сжечь и не вспоминать и книгу и автора этой книги, ну или переводчика и верстальщика :)
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн VlaoMao

  • Активист
  • *
  • Сообщений: 308
  • ArchLinux - eMachines e725 && Nokia N950
    • Просмотр профиля
Как минимум, это не правильно. Ровно, что во Writer текст выравнивать пробелами по центру. ;-)
Не вижу никаких неправильностей, кроме небольшой смеси. Это не смертельно.
пс. У многих редакторов есть выбор, чем отступы делать, табами или пробелами.

Оффлайн xeon_greg

  • Активист
  • *
  • Сообщений: 981
    • Просмотр профиля
Как минимум, это не правильно. Ровно, что во Writer текст выравнивать пробелами по центру. ;-)
Не вижу никаких неправильностей, кроме небольшой смеси. Это не смертельно.
пс. У многих редакторов есть выбор, чем отступы делать, табами или пробелами.
ну конечно мнение у каждого свое, но если каждый раз отступать от стандартов, то кавардак наступит очень быстро, как в свою очередь с вэбом произошло, до сих пор толком порядок навести не могут, надо учить людей писать чистый код и правильный

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
В таком случае выдаёт слудующее
Цитировать
123.cpp:11: warning: multi-character character constant
123.cpp:12: warning: multi-character character constant
123.cpp:13: warning: multi-character character constant
123.cpp: In function ‘int main()’:
123.cpp:11: warning: case label value exceeds maximum value for type
123.cpp:12: warning: case label value exceeds maximum value for type
123.cpp:13: warning: case label value exceeds maximum value for type
Код такой
#include<iostream>
#include<stdio.h>
using namespace std;
main()
{
char c;
cout << "Введите первую букву\n";
scanf ("%c", &c);
switch(c)
{
case 'а': printf("ааа\n"); break;
case 'б': printf("ббб\n"); break;
case 'в': printf("ввв\n"); break;
default: printf("Не знаю :(\n");
}
getchar();
}
Буквы русские

Погуглить по ключевому слову locale


#include <iostream>
#include <locale>

using namespace std;

int main()
{
    wchar_t c;

    std::locale::global(std::locale(""));

    std::wcout << L"Введите первую букву: " << std::flush;
    std::wcin >> c;
    switch(c) {
case L'а':
    std::wcout << L"ааа" << std::endl;
    break;
case L'б':
    std::wcout << L"ббб" << std::endl;
    break;
case L'в':
    std::wcout << L"ввв" << std::endl;
    break;
default:
    std::wcout << L"Не знаю :(" << std::endl;
    }
}

 

Страница сгенерирована за 0.025 секунд. Запросов: 22.