Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 31.07.2011, 20:34   #1
altaur
AnyKey`щик
 
Регистрация: 31.07.2011
Сообщений: 7
Написано 0 полезных сообщений
(для 0 пользователей)
C++ и русский

программирую в Visual studio 2008.
пишу программу для игры в города.

вот ошибка, которая возникает:

а когда введешь английский то:

то бишь программа работает и ошибка где то в алгоритме.

помогите пожалуйста))


текст программы:

#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include <fstream>
#include <cctype>
#include <string>
using namespace std;
int main()
{
setlocale(LC_ALL,"Russian"); //русские буквы в консоли
char gor[1200][100]; //массив для хранения городов
ifstream da("input.txt"); //здесь хранятся названия городов
int i=0;
int j=0;
int h=0;
int f=0;
while (!da.eof()) //считываю
{ //названия
da >> gor[i]; //городов
i++;
j++;
}
for (i=0;i<=j;i++)
{
gor[i][0]=tolower(gor[i][0]);//первую букву каждого города делаю маленькой.
} //поскольку города наз-ся "Анапа" а надо "анапа"
char b[1200][100];//массив для хранения названий городов, который ввел пользователь
bool a[1200];//был ли город выведен программой
for (;; ) //тут как бы логика игры
{
for (i=0;i<1200;i++) a[i]=0;//устанавливаем все значения на ложь
char s[50];
cin >> s;//считываем название города
h++;//считаем ход
int k=strlen(s);//определяем длину названия города
for (i=0; i<k; i++){if (isupper(s[i])) s[i]=tolower(s[i]);}//приводим название города к формату "анапа"
strcpy(b[h],s);//заносим название города в ходы
for (i=0;i<h;i++) if (!strcmp(b[h],b[i])) f=1;//проверяем, не вводили ли его раньше
for (i=0;i<=j;i++) {if (strcmp(gor[i],s)) a[i]=1;}//проверяем, есть ли он в базе наших городов
i=0;
if (s[k]=='ь' || s[k]=='ъ') k--;//"Казань" нет города начинающегося с "ь"
while ((s[k]!=gor[i][0] || !a[i])&& i<1200) {i++;}//ищем город
if (i==1200) f=2; else {cout<< (unsigned char)gor[i] << endl;}// если не нашли мы проиграли, иначе выводим город
if (f==1) {cout<< "ЖУЛИК!"; break;}
if (f==2) {cout<< "ПОБЕДИЛ! Молодец"; break;}
}

da.close();
f system ("pause");
return 0;
}
(Offline)
 
Ответить с цитированием
Старый 31.07.2011, 21:18   #2
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: C++ и русский

if (f=1)
и это работает правильно?

И кстатти, только я рисунков не вижу?
(Offline)
 
Ответить с цитированием
Старый 31.07.2011, 21:26   #3
altaur
AnyKey`щик
 
Регистрация: 31.07.2011
Сообщений: 7
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: C++ и русский

накладка))
я рисунки вижу.
проблема осталась.
(Offline)
 
Ответить с цитированием
Старый 31.07.2011, 21:28   #4
altaur
AnyKey`щик
 
Регистрация: 31.07.2011
Сообщений: 7
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: C++ и русский

http://i020.radikal.ru/1107/e6/47d8eaf27f56.jpg
http://s016.radikal.ru/i336/1107/b6/c8cfce26ddcc.jpg

вот картинки
(Offline)
 
Ответить с цитированием
Старый 31.07.2011, 22:14   #5
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: C++ и русский

не знаю, лично я не могу понять что там твориться. Могу только посоветывать пройтись построчно дебагом и понять когда именно валиться, или скинуть проект.
Потом:
1)Называй переменные осмыслено.
2)
for (i=0; i<k; i++){if (isupper(s[i])) s[i]=tolower(s[i]);}
что это за пиз*ец?
кастуй слова в нижний регистр, а не побуквено.

3)
тступы делай.
и когда постишь код обрамляй в соответствующий тег.
4)
проштудируй работу со строками в С++. потому что то что ты написал выглядит ужасно.

Удачи
(Offline)
 
Ответить с цитированием
Старый 31.07.2011, 22:23   #6
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: C++ и русский

for (i=0; i<k; i++){if (isupper(s[i])) s[i]=tolower(s[i]);}
разве для кириллицы так можно?
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
altaur (01.08.2011), Dream (31.07.2011)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 11:48.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com