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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2011, 16:50   #31
BrutalSnowflake
Пользователь
 
Аватар для BrutalSnowflake
 
Регистрация: 22.01.2011
Сообщений: 25
По умолчанию

Юппи! решил проблему. Кароче, заметил, что зацикливание начинаеться если вводишь букву или слово, а не цифру. Т.е. если я введу 5, то оно будет всё делать правильно - выбивать ошибку и просить ввести заново. Взял изменил тип вводимого oper с int на char, и в свиткейсе в одинарные кавычки всё взял естественно. И теперь всё норм работает))) ааааа, фак еааах! ]=>
BrutalSnowflake вне форума Ответить с цитированием
Старый 26.01.2011, 18:01   #32
Haarhus
 
Регистрация: 17.01.2011
Сообщений: 6
По умолчанию

Сейчас я покажу Вам переделанную версию Вашего программного кода под Visual Studio C++ (MSDEV)


/././././././././././././././././././././././././././././././././././././././././././././././././
Вы вечно молитесь своим богам,
и компилятор всё прощает вам.

Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
void main() {
        int x=0,operation_nomber;
        cout << "Viberite operciu: \n 1. Slogenie \n 2. Vichitanie \n 3. Umnogenie \n 4. Delenie \n\n";
        cin >> operation_nomber;
        while(!x) {
                if (operation_nomber>= 1 && operation_nomber<=4) break;
                else {
                       cin >> operation_nomber;
                       cout << "Oshibka vvoda! Vvedite chislo ot 1 do 4";
                }
        }
        system("pause");
}
/./././././././././././././././././././././././././././././././././
Вы вечно молитесь своим богам,
и компилятор всё прощает вам.

Последний раз редактировалось Stilet; 27.01.2011 в 14:49.
Haarhus вне форума Ответить с цитированием
Старый 26.01.2011, 19:57   #33
BrutalSnowflake
Пользователь
 
Аватар для BrutalSnowflake
 
Регистрация: 22.01.2011
Сообщений: 25
По умолчанию

Код:
cin >> operation_nomber;
cout << "Oshibka vvoda! Vvedite chislo ot 1 do 4";
Эти строки надо местами поменять
BrutalSnowflake вне форума Ответить с цитированием
Старый 26.01.2011, 20:26   #34
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

void main запрещено стандартом, сколько ж повторять)
Я правильный код ещё на первой странице дал:
Код:

#include <iostream>

int main()
{
    int operation_type;
    std::cout << "Viberite operciu: \n 1. Slogenie \n 2. Vichitanie \n 3. Umnogenie \n 4. Delenie \n\n";
    std::cin >> operation_type;
    while ( operation_type >= 1 && operation_type <= 4 ) {
        std::cout << "Oshibka vvoda! Vvedite chislo ot 1 do 4" << std::endl;
        std::cin >> operation_type;
    }
    std::cin.get();
}
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 26.01.2011, 20:42   #35
BrutalSnowflake
Пользователь
 
Аватар для BrutalSnowflake
 
Регистрация: 22.01.2011
Сообщений: 25
По умолчанию

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

на int main() уже заменил.

Obey-Kun, с этим кодом происходит то что я написал Haarhus'у в предыдущем сообщении

Точнее даже тут код вообще делает что-то обратное от нужного. Оно выбивает ошибку при введении правильных чисел. А при введении не правильны просто прерывает прогу О_о

Кстати, дополниетельный вопрос. Для чего в этом куске кода использовать *(звёздочку). Это указатель, но зачем он тут? (спрашиваю так как писал этот кусок не я, а на форуме подсказали):

Код:
int Error(char *a)

   {  bool error=false;

   	int strl=strlen(a), i, j;

      for (i=0;i<strl;i++)



      {	switch (a[i]){

      		case 'M':case 'D': case 'C': case 'L': case 'X':case 'V': case 'I': case ' ': break;

            default: error=true;

            break;}

Последний раз редактировалось Stilet; 27.01.2011 в 14:49.
BrutalSnowflake вне форума Ответить с цитированием
Старый 27.01.2011, 12:29   #36
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Да, обратное. А ты читать не умеешь? Ладно я не заметил ошибку, но ты же заметил... Разве не очевидно, где именно надо сделать исправление?

Было:
Код:
#include <iostream>

int main()
{
    int operation_type;
    std::cout << "Viberite operciu: \n 1. Slogenie \n 2. Vichitanie \n 3. Umnogenie \n 4. Delenie \n\n";
    std::cin >> operation_type;
    while ( operation_type >= 1 && operation_type <= 4 ) {
        std::cout << "Oshibka vvoda! Vvedite chislo ot 1 do 4" << std::endl;
        std::cin >> operation_type;
    }
    std::cin.get();
}
Стало
Код:
#include <iostream>

int main()
{
    int operation_type;
    std::cout << "Viberite operciu: \n 1. Slogenie \n 2. Vichitanie \n 3. Umnogenie \n 4. Delenie \n\n";
    std::cin >> operation_type;
    while ( operation_type < 1 || operation_type > 4 ) {
        std::cout << "Oshibka vvoda! Vvedite chislo ot 1 do 4" << std::endl;
        std::cin >> operation_type;
    }
    std::cin.get();
}
Цитата:
Кстати, дополниетельный вопрос. Для чего в этом куске кода использовать *(звёздочку). Это указатель, но зачем он тут? (спрашиваю так как писал этот кусок не я, а на форуме подсказали):
Передача массива по указателю на первый его элемент.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 27.01.2011, 16:17   #37
BrutalSnowflake
Пользователь
 
Аватар для BrutalSnowflake
 
Регистрация: 22.01.2011
Сообщений: 25
По умолчанию

Не, ну эт я понял. Но проблема зацикливание в этом коде будет.

Код:
Передача массива по указателю на первый его элемент.
Т.е. если перед именем массива будет стоять звёздочка, и данному указателю другого адреса не присвоено, то он указывает на первый элемент? т.е. равносильно тому что записать char a[1]?
BrutalSnowflake вне форума Ответить с цитированием
Старый 27.01.2011, 17:02   #38
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

имя массива - указатель на его первый элемент
a[1]- разименованный указатель
проще говоря
если вы сделаете с int-овым массивом
Код:
cout<<a<<endl<<a[1]
;
выведется
<адрес в памяти>
0//ну или не ноль, как повезет :D
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 28.01.2011, 01:28   #39
BrutalSnowflake
Пользователь
 
Аватар для BrutalSnowflake
 
Регистрация: 22.01.2011
Сообщений: 25
По умолчанию

Хм...так вроде ж при вводе cout<<a[1] должна вывестись инфа хранящаяся в файле данной ячейке а не её адрес О_о
BrutalSnowflake вне форума Ответить с цитированием
Старый 28.01.2011, 05:42   #40
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
Не, ну эт я понял. Но проблема зацикливание в этом коде будет.
В каком? где?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не понятно почему прога закрывается Saka Помощь студентам 11 21.12.2009 23:55
Помогите понять почему прога виснет Asira Помощь студентам 5 21.12.2009 22:57
не могу найти почему вылетает прога Андрей Куб Общие вопросы Delphi 19 28.04.2009 06:54