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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2012, 02:20   #1
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию Неправильно работает код Си++

Написал программу.
Код:
#include "stdafx.h"
#include <iostream>
#include "stdio.h"
#include "locale.h"
#include "conio.h"
#include <windows.h>
#include "stdlib.h"
#include "time.h"

int main()
{
	setlocale(LC_ALL, "Russian");
	int comp;
	int comp1,comp2,comp3;
	char number[100];
	int i = 0;
	char vvod[100],vvod2[100],vvod3[100],vvod4[100];
	int chislo_rand,chislo_rand2,chislo_rand3,chislo_rand4;
	int fl=0;
	int fl1=0;
	int fl2=0;
	int fl3=0;
	int d;//Ненужная переменная. не удалять.

	
	
	

	printf("Привет. Добро пожаловать в игру!\n");
	Sleep(3000);
	printf("Чтобы начать игру введите число из 4 цифр\n");
	l1:gets_s(number);
	if(strlen(number)!=4)
	{printf("Введите 4-х значное число!\n"); goto l1;}
	else
	printf("Компьютер загадывает число...ждите\n");
	Sleep(3000);
	srand(time(NULL));
	comp = 0 + rand() %9;
	comp1 = 0 + rand() %9;
	comp2 = 0 + rand() %9;
	comp3 = 0 + rand() %9;
	printf ("%d%d%d%d\n", comp,comp1,comp2,comp3);
	/******Присвоить переменной значения 1 цифра*****/
	if(comp==1)
		chislo_rand = 1;
	if(comp==2)
		chislo_rand = 2;
	if(comp==3)
		chislo_rand = 3;
	if(comp==4)
		chislo_rand = 4;
	if(comp==5)
		chislo_rand = 5;
	if(comp==6)
		chislo_rand = 6;
	if(comp==7)
		chislo_rand = 7;
	if(comp==8)
		chislo_rand = 8;
	if(comp==9)
		chislo_rand = 9;
	if(comp==0)
		chislo_rand = 0;
		/******Присвоить переменной значения 2 цифра*****/
	if(comp1==1)
		chislo_rand2 = 1;
	if(comp1==2)
		chislo_rand2 = 2;
	if(comp1==3)
		chislo_rand2 = 3;
	if(comp1==4)
		chislo_rand2 = 4;
	if(comp1==5)
		chislo_rand2 = 5;
	if(comp1==6)
		chislo_rand2 = 6;
	if(comp1==7)
		chislo_rand2 = 7;
	if(comp1==8)
		chislo_rand2 = 8;
	if(comp1==9)
		chislo_rand2 = 9;
	if(comp1==0)
		chislo_rand2 = 0;
		/******Присвоить переменной значения 3 цифра*****/
	if(comp2==1)
		chislo_rand3 = 1;
	if(comp2==2)
		chislo_rand3 = 2;
	if(comp2==3)
		chislo_rand3 = 3;
	if(comp2==4)
		chislo_rand3 = 4;
	if(comp2==5)
		chislo_rand3 = 5;
	if(comp2==6)
		chislo_rand3 = 6;
	if(comp2==7)
		chislo_rand3 = 7;
	if(comp2==8)
		chislo_rand3 = 8;
	if(comp2==9)
		chislo_rand3 = 9;
	if(comp2==0)
		chislo_rand3 = 0;
		/******Присвоить переменной значения 4 цифра*****/
	if(comp3==1)
		chislo_rand4 = 1;
	if(comp3==2)
		chislo_rand4 = 2;
	if(comp3==3)
		chislo_rand4 = 3;
	if(comp3==4)
		chislo_rand4 = 4;
	if(comp3==5)
		chislo_rand4 = 5;
	if(comp3==6)
		chislo_rand4 = 6;
	if(comp3==7)
		chislo_rand4 = 7;
	if(comp3==8)
		chislo_rand4 = 8;
	if(comp3==9)
		chislo_rand4 = 9;
	if(comp3==0)
		chislo_rand4 = 0;
	
	printf("%d%d%d%d\n", chislo_rand,chislo_rand2,chislo_rand3,chislo_rand4);

		
	printf("Готово!\n");
	l4:gets_s(vvod);
if(strlen(vvod)==1)
	d=0;
else{printf("Введите 1 цифру\n"); goto l4;}
if(int chislo_rand = (int)vvod) 
printf("DA");
else printf("NET");

l5:gets_s(vvod2);   
if(strlen(vvod2)==1)
	d=0;
else{ printf("Введите 1 цифру\n"); goto l5;}
if(int chislo_rand2=int(vvod2))
fl1=0;
else fl1+=1;
l6:gets_s(vvod3);
if(strlen(vvod3)==1)
	d=0;
else{ printf("Введите 1 цифру\n"); goto l6;}
if(int chislo_rand3=int(vvod3))
fl=0;
else fl2+=1;
l7:gets_s(vvod4);
if(strlen(vvod3)==1)
	d=0;
else{printf("Введите 1 цифру\n"); goto l7;}
if(int chislo_rand4=int(vvod4))
	fl3=0;
else fl3+=1;

if(fl==0 && fl1==0 && fl2==0 && fl3==0)
	printf("Победа");
else 
	{if(fl==1 && fl1==1 && fl2==1 && fl3==1)
	printf("Неверно! Попробуйте еще раз");
	goto l4;}
	
	
_getch();

return 0;
}
Там где выделил красным постоянно выдает "ДА" Какую бы цифру я не вбил. Очень хочу разобраться почему так(( Код мне переделывать полностью не надо. Может кривой и т.д - но родной)
Praud вне форума Ответить с цитированием
Старый 01.12.2012, 07:07   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
if(int chislo_rand = (int)vvod)
Скорее удивительно, что компилятор это вообще пропускает. int chislo_rand = (int)vvod, в переводе с C++ на русский, означает "объявить новую переменную chislo_rand типа int, присвоить ей значение переменной vvod, приведённой к типу int".
Для обращения к существующей переменной, надо убрать первое int, это проще всего (откуда вообще Вы взяли такую конструкцию?..)
Для сравнения вместо присваивания, надо использовать оператор сравнения == (который сравнивает левую часть с правой и возвращает true или false) вместо оператора присваивания = (который присваивает левой части значение, полученное в результате вычисления правой и возвращает присвоенное значение).
Наконец - и это самый тонкий момент, - приведение типов является довольно "тупым" преобразованием. "Реальная" переменная vvod хранит одно 4-байтовое число, адрес в памяти, с которого начинается запрошенный Вами при её создании массив из 100 байт. Этот адрес имеет вид (в шестнадцатеричной системе) вида 0x70f3ac38. Чему будет равно (int)vvod? Да тому же самому, 0x70f3ac38, около двух миллиардов. Прочитать символы из этого массива и распознать их как целое число - задача заметно более интеллектуальная. Для этого может быть использована функция atoi(). Как альтернатива, можно читать не строку, а один символ (изменив, разумеется, тип переменной vvod), и проверять, является ли он цифрой.

Когда (не "если", заметьте) возникнут новые вопросы - обращайтесь
Abstraction вне форума Ответить с цитированием
Старый 01.12.2012, 11:14   #3
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Спасибо. int убрал и написал ==, но все та же проблема. Теперь только постоянно "Нет" пишет). Буду разбираться с функцией atoi()

Но вот возникло пару вопросов. Там где определяется rand_chislo1-4 можно как-то присвоить эти числа переменной новой? допустим x.
В смысле хочу если rand_chislo1 = 1, rand_chislo2=2, rand_chislo3=3, rand_chislo4=4
x=1234
как-то так...
Praud вне форума Ответить с цитированием
Старый 01.12.2012, 13:55   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Спасибо. int убрал и написал ==, но все та же проблема. Теперь только постоянно "Нет" пишет)
Логично. Чтобы сейчас написало "да", chislo_rand должно быть равно величине некоторого адреса в памяти.
Цитата:
Там где определяется rand_chislo1-4 можно как-то присвоить эти числа переменной новой? допустим x.
В смысле хочу если rand_chislo1 = 1, rand_chislo2=2, rand_chislo3=3, rand_chislo4=4
x=1234
Что такое 1234? Это 1*1000+2*100+3*10+4*1. Намёк понятен?
Abstraction вне форума Ответить с цитированием
Старый 01.12.2012, 14:32   #5
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

использовал функцию atoi и все стало нормально.
теперь такой вопрос. Можно как-то сделать так чтобы когда ввел строку и нажал ентер не перебрасывало на новую строку?(\n)
Praud вне форума Ответить с цитированием
Старый 01.12.2012, 19:27   #6
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Тема спустилась вниз....Помогите )))
Praud вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
rand() неправильно работает demigod82 Общие вопросы C/C++ 7 02.04.2012 17:35
Неправильно работает таймер Юшков Компоненты Delphi 9 07.11.2011 14:42
Неправильно работает вродебы правильный код ImmortalAlexSan Помощь студентам 0 25.04.2011 07:29
Макрос работает неправильно AllenJ Microsoft Office Word 0 13.04.2011 21:17
Неправильно работает поиск Власов А.С. БД в Delphi 5 12.10.2009 05:59