Форум программистов, компьютерный форум CyberForum.ru

Помогите разобраться с switch - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 16:33     Помогите разобраться с switch #1
Вот код программы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    int i_1x;
    i_1x = 0;
    char a_n[10];
 
    ifstream input("input.txt");
    input >> a_n;
 
    switch (a_n[0])
    {
    case 'C': 
        i_1x = 3; 
        break;
    default:  
        cout << "ERROR"; 
    }
Программа выводит "ERROR".
В читаемом файле "input.txt" находится символ 'C', но программа все равно выводит "ERROR". Ничего не пойму;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2011, 16:33     Помогите разобраться с switch
Посмотрите здесь:

Помогите разобраться... C++
помогите разобраться с gcc C++
Помогите новичку разобраться с С++ C++
C++ Помогите разобраться
Помогите разобраться с try-catch! C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
14.08.2011, 16:35     Помогите разобраться с switch #2
В читаемом файле "input.txt" находится символ 'C
а что в a_n? файл не юникодный?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
14.08.2011, 16:36     Помогите разобраться с switch #3
перед switch добавь строку:
C++
1
std::cout<<a_n<<std::endl;
посмотри, что реально читается.
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 16:40  [ТС]     Помогите разобраться с switch #4
Цитата Сообщение от Kastaneda Посмотреть сообщение
перед switch добавь строку:
C++
1
std::cout<<a_n<<std::endl;
посмотри, что реально читается.
Смотрел, выводит символ 'C' без всяких сюрпризов.

Добавлено через 25 секунд
Цитата Сообщение от villu Посмотреть сообщение
а что в a_n? файл не юникодный?
А как это проверить?
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
14.08.2011, 16:40     Помогите разобраться с switch #5
всё работает!!!а ты создал файл input.txt?
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
14.08.2011, 16:40     Помогите разобраться с switch #6
тогда давай сюда этот файл.
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 16:42  [ТС]     Помогите разобраться с switch #7
Цитата Сообщение от Ree.exe Посмотреть сообщение
всё работает?а ты создал файл input.txt?
Да. Он этот символ читает.

Добавлено через 1 минуту
Цитата Сообщение от villu Посмотреть сообщение
тогда давай сюда этот файл.
А как его дать?
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
14.08.2011, 16:44     Помогите разобраться с switch #8
кнопка "ответить" -> внизу "Вложить файлы"
Сыроежка
Заблокирован
14.08.2011, 16:45     Помогите разобраться с switch #9
Цитата Сообщение от adamo86 Посмотреть сообщение
Вот код программы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    int i_1x;
    i_1x = 0;
    char a_n[10];
 
    ifstream input("input.txt");
    input >> a_n;
 
    switch (a_n[0])
    {
    case 'C': 
        i_1x = 3; 
        break;
    default:  
        cout << "ERROR"; 
    }
Программа выводит "ERROR".
В читаемом файле "input.txt" находится символ 'C', но программа все равно выводит "ERROR". Ничего не пойму;
'Cэ может быть и русской буквлй 'C', и латинской буквой 'C'. Поэтому для проверки распечатайте ее hex код с помощью манипулятора потока std::hex.
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 16:47  [ТС]     Помогите разобраться с switch #10
Цитата Сообщение от villu Посмотреть сообщение
кнопка "ответить" -> внизу "Вложить файлы"
Вот файл input.txt
Вложения
Тип файла: txt input.txt (5 байт, 18 просмотров)
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 16:52  [ТС]     Помогите разобраться с switch #11
Цитата Сообщение от Сыроежка Посмотреть сообщение
'Cэ может быть и русской буквлй 'C', и латинской буквой 'C'. Поэтому для проверки распечатайте ее hex код с помощью манипулятора потока std::hex.
Я как-то не знаком с этим - "hex". Что именно надо сделать?

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    int i_1x;
    i_1x = 0;
    char a_n[10];
 
    ifstream input("input.txt");
    input >> a_n;
 
    switch (a_n[0])
    {
 
    case 'C': 
        i_1x = 3; 
        break;
 
    default:  
        cout << "ERROR"; 
        b_b = false; break;
    }
    cout << i_1x;
Сейчас ERROR не выводит, но и переменной i_1x не приравнивает 3. Программа выводит "0".
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
14.08.2011, 16:54     Помогите разобраться с switch #12
Ну незнаю, у меня всё отлично работает.
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
#include <iostream>
#include<fstream>
 
using namespace std;
int main()
{
    int i_1x;
    char a_n[10];
 
    ofstream file_("input.txt");
    file_<<"C7-D5";
    file_.close();
    ifstream file("input.txt",0x20);
    file>>a_n;
 
    switch (a_n[0])
    {
    case 'C': 
            i_1x = 3; 
            break;
    default:  
            cout << "ERROR"; 
    }
    cout<<i_1x;
    file.close();
}
В итоге выводит 3 в консоль.
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
14.08.2011, 16:58     Помогите разобраться с switch #13
хм, даже с вашим файлом все нормально выводит, вы уверены что файл лежит рядом с исполняемым файлом?
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 17:01  [ТС]     Помогите разобраться с switch #14
Цитата Сообщение от silentnuke Посмотреть сообщение
хм, даже с вашим файлом все нормально выводит, вы уверены что файл лежит рядом с исполняемым файлом?
Да конечно лежит. Ведь cout << a_n[0]; выводит "C"
Сыроежка
Заблокирован
14.08.2011, 17:08     Помогите разобраться с switch #15
Цитата Сообщение от adamo86 Посмотреть сообщение
Да конечно лежит. Ведь cout << a_n[0]; выводит "C"
Дело в тогм, что у вас нет проверки того, успешно ли файл открылся, или нет. Я думаю, проблема в том, что у вас файл на самом деле не отткрывается, и в первом элементе массива у вас находится "мусор".

Поэтому сделайте проверку на то, что файл открылся успешно.
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 17:12  [ТС]     Помогите разобраться с switch #16
Цитата Сообщение от Сыроежка Посмотреть сообщение
Дело в тогм, что у вас нет проверки того, успешно ли файл открылся, или нет. Я думаю, проблема в том, что у вас файл на самом деле не отткрывается, и в первом элементе массива у вас находится "мусор".

Поэтому сделайте проверку на то, что файл открылся успешно.
А как сделать эту проверку?

Добавлено через 2 минуты
Попробую сейчас комп перезагрузить...
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
14.08.2011, 17:13     Помогите разобраться с switch #17
C++
1
2
3
4
if(file)
        cout<<"Открыт";
    else
        cout<<"Не открыт";
Сыроежка
Заблокирован
14.08.2011, 17:15     Помогите разобраться с switch #18
Цитата Сообщение от adamo86 Посмотреть сообщение
А как сделать эту проверку?

Добавлено через 2 минуты
Попробую сейчас комп перезагрузить...
C++
1
if ( !input ) return ( 1 );
adamo86
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 17:25  [ТС]     Помогите разобраться с switch #19
Ребят!!! Заработало.
После перезагрузки заработало. По моему я нашел ошибку:
Я ведь после открытия файла "input.txt" его и не закрывал (input.close(). Наверное из-за этого там какой-то мусор может накопился. Это лишний раз доказывает, что в C++ надо быть осторожно с памятью.
Всеv спасибо за оказанную поддержку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2011, 18:52     Помогите разобраться с switch
Еще ссылки по теме:

C++ не могу разобраться со switch.
C++ Помогите пожалуйста разобраться с Switch case
C++ Помогите разобраться :)

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

Или воспользуйтесь поиском по форуму:
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
14.08.2011, 18:52     Помогите разобраться с switch #20
Цитата Сообщение от Сыроежка Посмотреть сообщение
Дело в тогм, что у вас нет проверки того, успешно ли файл открылся, или нет. Я думаю, проблема в том, что у вас файл на самом деле не отткрывается, и в первом элементе массива у вас находится "мусор".

Поэтому сделайте проверку на то, что файл открылся успешно.
если у него из файл счисталось, и cout вывел то что надо, как файл мог быть не открыт, оО?
Yandex
Объявления
14.08.2011, 18:52     Помогите разобраться с switch
Ответ Создать тему
Опции темы

Текущее время: 02:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru