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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2014, 02:30   #1
s4egol
Пользователь
 
Регистрация: 05.09.2012
Сообщений: 56
По умолчанию Ввод в Си

Приветствую всех
Думаю по этой проблеме точно поможете
Суть в том что мне в консоле в СИ нужно вписывать строку с символами русского алфавита. Суть в том что при в воде все вводится отлично, однако в массив типа char забиваются какие - то иероглифы в результате чего невозможно дальнейшее использование программы.
Вот как я ввожу текст и в дальнейшем в массиве key[] появляется множество иероглифов.

Код:
#include "stdafx.h"
#include <clocale>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <windows.h>

int main(array<System::String ^> ^args)
{
	char key[15] = { };
	char alphabet[34] = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
	setlocale(LC_ALL,"Russian");

	cout << "         Реализация метода Виженера         " << endl;
	cout << endl;
	cout << "Введите ключ для начала шифрования: " << endl;
	cin >> key;
	encoder(key,alphabet);
	system("pause");
    return 0;
}

Последний раз редактировалось Stilet; 19.09.2014 в 08:20.
s4egol вне форума Ответить с цитированием
Старый 19.09.2014, 05:48   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

1. У вас не С, а C++ CLI
2. Используйте wchar или нетовский чар
3. Для ввода тоже желательно использовать всин
p51x вне форума Ответить с цитированием
Старый 19.09.2014, 10:41   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Ввод с консоли осуществляется в кодировке CP866.
В исходном коде кодировки CP1251.
Все перекодировки самостоятельно. В 2001 году, когда я начинал, мне советовали перекодировку строк для консоли делать посредством функции CharToOem, а не установкой локали.

Код:
#include "stdafx.h"
#include <cstring>
#include <iostream>
#include <stdio.h>

using namespace System;
using namespace std;

int position(char alphabet[34], char sym) { int i; for(i=0; i<33; i++) if(sym ==alphabet[i]) return i; return -1;}

void encoder(char key[16], char text[16], char alphabet[34])
{
char keyscheme[16]; char result[16]; char scheme[33][33]; int i,j,k,l,m;
for(l=0,m=0;l<16;l++) { keyscheme[l]=key[m++]; if(m==strlen(key))m=0;}
printf("keyscheme:\n"); for(l=0;l<strlen(text);l++) printf("%c", keyscheme[l]); printf("\n");
for(k=0,i=0;i<33;i++) for(j=0;j<33;j++) {scheme[i][j]=keyscheme[k++]; if(k==15) k=0;}
printf(" "); for(i=0; i<33;i++) printf("%c", alphabet[i]); printf("\n");
for(i=0; i<33;i++, printf("\n")) for(printf("%c",alphabet[i]), j=0;j<33; j++) printf("%c", scheme[i][j]);
printf("\n");
for(l=0; l< strlen(text); l++) result[l]= scheme[(position(alphabet,keyscheme[l]))][(position(alphabet,text[l]))], printf("%c",result[l]);
printf("\n");
}

int main(array <System::String ^> ^args)
{
char text[16];
char key[16];
char alphabet[34]="\xa0\xa1\xa2\xa3\xa4\xa5\xf1\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef";
cout << "Viginer method" << endl << "Key: "<<endl;
cin>>key; cout <<key<<endl<<"Text: "<< endl;
cin>>text; cout <<text<<endl;
encoder(key, text, alphabet);
system("pause");
return 0;
}
Чтобы просмотреть таблицу ASCII
Код:
int i;
for(i=0;i<255;i++)
printf("%d %x\n", i, i);
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прогу которая запрашивает ввод пароля,если пароль введен верно-то какойнь сообщение,если нет-дается 3 попытки на ввод правильного BornOfOsiris Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 10.12.2012 09:12
Запретить ввод более одной десятичной точки в форму ввода("некорректный ввод") adller_one PHP 1 13.01.2011 23:59
ввод строк ZET78 Общие вопросы C/C++ 4 07.05.2010 23:58
Ввод Paul_AG Общие вопросы C/C++ 2 05.06.2009 00:02