Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
1

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

14.08.2011, 16:33. Показов 1875. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот код программы:

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". Ничего не пойму;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.08.2011, 16:33
Ответы с готовыми решениями:

Помогите пожалуйста разобраться с Switch case
Сразу предупрежу ,что я полный ламер) Мне нужно выполнить лабораторку с использованием конструкции...

не могу разобраться со switch.
мне надо переделать программу через switch, но у меня вылазит ряд ошибок, разобраться с ними не...

Разобраться с программой со Switch
Здравствуйте. Не могу понять,как работает программа. Был бы рад,если бы кто-то объяснил,что при...

Не могу разобраться с switch
Написал в виде теста: #include &lt;stdio.h&gt; #include &lt;ctype.h&gt; int main () { char ch;...

21
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
14.08.2011, 16:35 2
В читаемом файле "input.txt" находится символ 'C
а что в a_n? файл не юникодный?
1
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
14.08.2011, 16:36 3
перед switch добавь строку:
C++
1
std::cout<<a_n<<std::endl;
посмотри, что реально читается.
1
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 16:40  [ТС] 4
Цитата Сообщение от Kastaneda Посмотреть сообщение
перед switch добавь строку:
C++
1
std::cout<<a_n<<std::endl;
посмотри, что реально читается.
Смотрел, выводит символ 'C' без всяких сюрпризов.

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

Добавлено через 1 минуту
Цитата Сообщение от villu Посмотреть сообщение
тогда давай сюда этот файл.
А как его дать?
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
14.08.2011, 16:44 8
кнопка "ответить" -> внизу "Вложить файлы"
1
Заблокирован
14.08.2011, 16:45 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.
1
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 16:47  [ТС] 10
Цитата Сообщение от villu Посмотреть сообщение
кнопка "ответить" -> внизу "Вложить файлы"
Вот файл input.txt
Вложения
Тип файла: txt input.txt (5 байт, 19 просмотров)
0
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 16:52  [ТС] 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".
0
56 / 56 / 16
Регистрация: 01.08.2011
Сообщений: 141
14.08.2011, 16:54 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 в консоль.
1
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
14.08.2011, 16:58 13
хм, даже с вашим файлом все нормально выводит, вы уверены что файл лежит рядом с исполняемым файлом?
1
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 17:01  [ТС] 14
Цитата Сообщение от silentnuke Посмотреть сообщение
хм, даже с вашим файлом все нормально выводит, вы уверены что файл лежит рядом с исполняемым файлом?
Да конечно лежит. Ведь cout << a_n[0]; выводит "C"
0
Заблокирован
14.08.2011, 17:08 15
Цитата Сообщение от adamo86 Посмотреть сообщение
Да конечно лежит. Ведь cout << a_n[0]; выводит "C"
Дело в тогм, что у вас нет проверки того, успешно ли файл открылся, или нет. Я думаю, проблема в том, что у вас файл на самом деле не отткрывается, и в первом элементе массива у вас находится "мусор".

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

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

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

Добавлено через 2 минуты
Попробую сейчас комп перезагрузить...
C++
1
if ( !input ) return ( 1 );
1
2 / 2 / 0
Регистрация: 10.04.2011
Сообщений: 185
14.08.2011, 17:25  [ТС] 19
Ребят!!! Заработало.
После перезагрузки заработало. По моему я нашел ошибку:
Я ведь после открытия файла "input.txt" его и не закрывал (input.close(). Наверное из-за этого там какой-то мусор может накопился. Это лишний раз доказывает, что в C++ надо быть осторожно с памятью.
Всеv спасибо за оказанную поддержку.
0
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
14.08.2011, 18:52 20
Цитата Сообщение от Сыроежка Посмотреть сообщение
Дело в тогм, что у вас нет проверки того, успешно ли файл открылся, или нет. Я думаю, проблема в том, что у вас файл на самом деле не отткрывается, и в первом элементе массива у вас находится "мусор".

Поэтому сделайте проверку на то, что файл открылся успешно.
если у него из файл счисталось, и cout вывел то что надо, как файл мог быть не открыт, оО?
0
14.08.2011, 18:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.08.2011, 18:52
Помогаю со студенческими работами здесь

Калькулятор: разобраться с блоками switch
В чем беда, объясните что не так?using System; using System.Collections.Generic; using...

Помогите Разобраться
попытка организовать поиск по нажатию заданной кнопки в браузере procedure...

Помогите разобраться с ОУ
Помогите, пожалуйста, разобраться. Надо из одного напряжения вычесть другое, затем умножить на...

Помогите разобраться.
В чем разница между turbo pascal и free pascal? ну кроме названия и то что free пошёл у меня на...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru