Часть 2. Я начинающий, подскажите как...(Все вопросы начинающих!!!)
ListBox1->Columns=3;
каким образом записать строку в второй и третий столбцы?
{
case 1:
{
ofstream out("log.txt", ios:: out);
if (!out)
{
cerr << "can't open 'log.txt'.";
return 1;
}
...
...
out.close();
}
break;
case 2:
{
ifstream in("log.txt");
if (! in)
{
cerr << "can't open 'log.txt'";
return 1;
}
...
...
in.close();
}
break;
}
не помогает. мгу кинуть целиком код.
#include<fstream>
#include<string>
using namespace std;
int main()
{
char alfavit[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' '},
shifralf[27] = {'x','z','a','v','o','i','d','b','y','g','e','r','s','p','c','f','h','j','k','l','m','n','q','t','u','w',' '};
string login, newlogin, inlogin, innewlogin;
unsigned short int loglen, inloglen;
int choice;
cin >> choice;
switch(choice)
{
case 1:
ofstream out("log.txt", ios::out);
if (!out)
{
cerr << "can't open.\n";
cin.get();
return 1;
}
getline(cin, login);\\вводим логин
\\шифруем и записываем в фаил
loglen = login.length();
for(int j=0;j<loglen;j++)
{
for (int i=0;i<27;i++)
{
if (login[j]==alfavit)
{
newlogin[j]=shifralf;
out.put(newlogin[j]);
}
}
}
out.close();
break;
case 2:
ifstream in("log.txt");
if (! in)
{
cerr << "can't open file";
cin.get();
return 1;
}
\\вводим логин чтобы сверить с тем что в файле
getline(cin, login);
\\дешифруем
getline(in,inlogin);
inloglen = inlogin.length();
for(int j=0;j<inloglen;j++)
{
for (int i=0;i<27;i++)
{
if (inlogin[j]==shifralf)
{
//cout << alfavit;
innewlogin[j]=alfavit;
}
}
}
\\ сверяем
if (login==inlogin)
cout<< "done";
in.close();
cin.get();
return 0;
}
У тебя комментарий // в какую сторону?
У тебя комментарий // в какую сторону?
ну немножко умею. подсказывал ошибку я ее уже писал. а коммент я ток щя добавил.
case 1:
{
...
}
break;
case 2:
{
...
}
break;
...
Так хоть компилиться будет :D
ксати так он на свитч не ругался. я еще к тому же скобку забыл поставить. спс.
#include<fstream>
#include<string>
using namespace std;
int main()
{
char alfavit[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' '},
shifralf[27] = {'x','z','a','v','o','i','d','b','y','g','e','r','s','p','c','f','h','j','k','l','m','n','q','t','u','w',' '};
string login, newlogin, inlogin, innewlogin;
unsigned short int loglen, inloglen;
fstream file;
...
switch(choice)
{
case 1:
file.open( "log.txt", ios::out );
...
file.close();
break;
case 2:
file.open( "log.txt", ios::in );
...
file.close();
break;
}
}
...
Можешь так извернуться.
Можешь так извернуться.
млин терь он тыкает на самый конец и говорит чтото такое непонятное:
99 log2.cpp expected constructor, destructor, or type conversion before '.' token
99 log2.cpp expected `,' or `;' before '.' token
100 log2.cpp expected unqualified-id before "return"
100 log2.cpp expected `,' or `;' before "return"
101 log2.cpp expected declaration before '}' token
{
char alfavit[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' '},
shifralf[27] = {'x','z','a','v','o','i','d','b','y','g','e','r','s','p','c','f','h','j','k','l','m','n','q','t','u','w',' '};
string login, newlogin, inlogin, innewlogin;
unsigned short int loglen, inloglen;
fstream file;
int choice;
cout <<
cout <<
cout <<
cin >> choice;
switch(choice)
{
case 1:
{
file.open("log.txt", ios::out);
if (!file)
{
cerr <<
cin.get();
return 1;
}
cout <<
getline(cin, login);
loglen = login.length();
for(int j=0;j<loglen;j++)
{
for (int i=0;i<27;i++)
{
if (login[j]==alfavit)
{
newlogin[j]=shifralf;
file.put(newlogin[j]);
}
}
}
cin.get();
file.close();}
case 2:
file.open("log.txt", ios::in);
cout <<
if (!file)
{
cerr <<
cin.get();
return 1;
}
getline(cin, login);
getline(file,inlogin);
inloglen = inlogin.length();
for(int j=0;j<inloglen;j++)
{
for (int i=0;i<27;i++)
{
if (inlogin[j]==shifralf)
{
//cout << alfavit;
innewlogin[j]=alfavit;
}
}
}
if (login==inlogin)
cout<< "done";
file.close();}
}
cin.get();
return 0;
}
гыы да не насамом деле все не так сложно. в книгах эти алгоритмы жесткие а этот я сам сделал. там главное не шифрование. у меня не получается сделать ввод вывод по свичу. а остальное это легко.
Не подскажите как на C++ реализовать эмуляцию нажатия сочетания клавиш ctrl + Esc для открытия меню "Пуск".
скобку поставил. тупанул.
слушайте я тут понял в чем у меня проблема.
я считываю стринг гетлайном. но если я пишу гетлайн в свиче он его пропускает?! :confused:
int a;
cin >> a;
switch(a)
{
case 1:
{
cout << "Vvedite slovo ";
getline (cin, login); // пропускает эту строку :confused:
cout << "vashe slovo: ";
cout << login ;
cin.get();
break;
}
case 2:
{
cout << "petya" << endl;
break;
}
}
return 0;
как считать стринг в свиче?
Интуиция подсказывает, что дело не в свиче. Как сделать по уму - не знаю. Возможно, как-то так:
cin.ignore();
getline (cin, login); // пропускает эту строку?
cin.ignore();
getline (cin, login); // пропускает эту строку?
Ооо... Благодарствую.. нет теперь не пропускает. я бы никогда до такого самостоятельно не догнал. спасибо.
А втолковать на будущее можете, что это значит? что он игнорит?
Понятия не имею, что там за механизмы. Может опыт подскажет что-нибудь:
{
char c = 0;
cin.get(c);
if(c != '\n')
cin.unget();
else
cout << "(\\n in cin) ";
}
getline (cin, login); // пропускает эту строку?
Хотя по науке надо найти какое-нибудь объяснение в стандарте.
{
char c = 0;
cin.get(c);
if(c != '\n')
cin.unget();
else
cout << "(\\n in cin) ";
}
getline (cin, login); // пропускает эту строку?
Хотя по науке надо найти какое-нибудь объяснение в стандарте.
нет тоже не пропускает.
может это от компилятора както зависит? у меня ДевС++ к слову).
дано три переменные чар.
char b='b';
char c='c';
string str;
необходимо чтоб в str было:
Делаю вот так:
ошибку не показывает, и символ не вставляет. думал еще:
str.append(b);
тоже не хочет:confused:
Как мне представляется, операцией
вы создаете строку нулевой длины. И сразу же делаете попытку присваивать значение элементу (символу) строки, которая ни к чему не приводит, т.к. этого элемента просто нет.
Перед присваиванием
нужно или сделать так, чтобы в строке выделилось место под необходимое вам количество элементов, например, так:
или при создании строки сразу проинициализировать ее каким-либо значением из 6 символов, например, из 6 пробелов:
а команда str.append(b); работать не будет, потому что для append аргументом должен быть char-овский массив или другой string.
или при создании строки сразу проинициализировать ее каким-либо значением из 6 символов, например, из 6 пробелов:
Да уж, лёгких путей мы не ищем, нормальный конструктор не судьба использовать.
Про "нормальный конструктор" (а точнее - про нормальное использование конструктора string в данном контексте) мне известно. Тот вариант инициализации я привел потому, что исходил из предположения, что задача была не в том, чтобы создать строку с заранее известным содержанием, а в том, чтобы создать строку, и последовательно заполнять ее символами из какого-то предопределенного набора, каким символом какой элемент заполнять - определяется согласно дальнейшим условиям в коде. Хотя, конечно же, я мог ошибиться, и Breeve всего лишь требовалось получить строку с предопределенной последовательностью символов - если так, то разумеется здесь наиболее уместен ваш вариант.
Вот это вы госсу. вы правильно все подумали мне как раз таки надо заполнять символами "из какого-то предопределенного набора". а если быть точно. могу пояснить что я хочу, если кому интересно конечно.
я делаю шифратор/дешифратор.
shifralf[27] = {'x','z','a','v','o','i','d','b','y','g','e','r','s','p','c','f','h','j','k','l','m','n','q','t','u','w',};
я думаю далее и так все понятно и комментарии не нужны.
спасибо за помощь!
как сделать так чтобы то что ты вводишь закрывалось звездочками, как пароль. при условии что я использую консольное приложение? честно юзал поиск нашел ток на делфях. :(
и еще как сделать проверку на первое открытие программы? поставить какуюто метку или что-то вроде того.
Если уж такие проблемы всё-таки есть,то прочитай про посимволный консольный ввод.Тогда ты будешь перехватывать каждый символ без отображения,а вместо него выводить звёздочку
1)Что за 1е открытие?Запуск в 1й раз или запуск 1го экземпляра?Если 1е,то да,делай метку(например,как программы с TechNet–после подтверждения EULA они ставят метку в реестре);если 2е,то мьютексы в помощь
Или любой другой именованный объект ядра.
Если уж такие проблемы всё-таки есть,то прочитай про посимволный консольный ввод.Тогда ты будешь перехватывать каждый символ без отображения,а вместо него выводить звёздочку
1)Что за 1е открытие?Запуск в 1й раз или запуск 1го экземпляра?Если 1е,то да,делай метку(например,как программы с TechNet–после подтверждения EULA они ставят метку в реестре);если 2е,то мьютексы в помощь
честно говоря я не особо понял.
1. я нашел только одну ссылку насчет посимвольного ввода.
2. мне надо первого запуска. что такое текнет я незнаю. и как вставить метку в реестр тем более. а по подробнее какнибудь можно?
я делаю шифратор/дешифратор.
Я видел ваши предыдущие посты, где вы помещали код вашей программы - потому, собственно, я так и подумал, зачем вам нужно было, имея несколько символов, заполнять ими строку. И задача у вас, ИМХО, интересная, так что желаю успехов. :)
Ну так на странице по той ссылке как раз приведены примеры, как сделать то что вам нужно
Первый пример - во втором посте сверху. Правда, он у меня не закомпилился, немного переделал и вот что у меня получилось (функция с тестовым кодом):
#include <conio.h>
#include <string>
using namespace std;
const string get_pwd() {
string str;
char c;
for( ;; )
{
switch( c = getch())
{
case 13: // Нажата клавиша Enter
cout << endl;
return str;
default:
str += c;
cout << "*";
}
}
}
int main() {
string str = get_pwd();
cout << "You entered password: " << str << endl;
}
Правда, не могу ручаться что это наилучший вариант, поищите - может найдете и получше...
+ здесь не реализовано стирание (по BackSpace) неверно введенных символов пароля - BackSpace будет считаться как очередной введенный символ. И как сделать чтобы стиралось - я честно говоря, не знаю. Вернее, я знаю как сделать, чтобы по BackSpace удалялся последний символ из string str, но вот как сделать чтобы еще и с экрана звездочка удалялась - быстро найти у меня не получилось, так что попробуйте сами поискать (или может кто другой подскажет)...
P.S. Да, и еще здесь не сделано перемещение стрелками курсора по уже введенному значению пароля (отображаемому звездочками), и стирание / вставка / замена символов в начале / середине строки.
P.S. Да, и еще здесь не сделано перемещение стрелками курсора по уже введенному значению пароля (отображаемому звездочками), и стирание / вставка / замена символов в начале / середине строки.
Не нужен такой функционал при вводе пароля.
выбираются элементы расположенные в порядке возрастания и переносятся в выходной массив, а их места в исходном массиве заменяются на -1, затем оставшиеся элементы включаются в полученную упорядоченную последовательность
методом погружения. На промежуточном этапе застрял, не получается перенести оставшиеся элементы, почему-то переносится только последний 50 шесть раз, а не 12,21,10,8,45,50 как должно быть.
Заранее благодарен.
//программа "хитрой" сортировки
#include<stdio.h>
#include<conio.h>
int amax,imax;
void sort(int n);//функция сортировки
int enter[10]={39,12,41,21,53,10,8,45,60,50}; //неотсортированный массив
int exit[10]; //отсортированный массив
int main()
{
sort(10);
for(int i=0;i<10;i++)
printf("enter[%d]= %d exit[%d]= %d \n",i,enter,i,exit);
printf("\n");
getch();
return 0;
}
void sort(int n)
{
int t=0;
amax=enter[0]; //стартовый элемент считать максимальным
exit[0]=amax;
for(int i=0;i<n;i++)
{
imax=i;
for(int j=i+1;j<n;j++)
if(enter[j]>amax)
{
t++;
exit[t]=enter[j];
enter[imax]=-1;
amax=enter[j];
imax=j;
enter[imax]=-1;
}
}
//не могу разобраться с этим фрагментом
for(i=0;i<n;i++)
{
if(enter!=-1)
for(t=4;t<n;t++)
{
exit[t]=enter;
}
}
}
происходит вот из-за чего:
{
exit[t]=enter;
}
Подумайте сами, что происходит в данном цикле, и на что его нужно заменить, чтобы работало так как вы хотели.
Дело обстоит так: был создан проект и была подключена к нему библиотека. Использовать в файлах проекта классы, описанные в файлах библиотеки получается, использовать в файлах библиотеки классы, описанные в файле основного проекта - нет. Подскажите, как сделать так, чтобы можно было пользоваться классами описанными в файле основного проекта в файлах библиотеки?
Для примера, вот код из основного проекта:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using neuroLibraryNamespace;
namespace neuro
{
public class zlo...
public partial class InitializationForm : Form...
}
А это код из библиотечного файла:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;
using System.Design;
namespace neuroLibraryNamespace
{
public class neuroLibrary...
}
Применительно к этому коду вопрос звучит следующим образом: что нужно сделать, чтобы класс ZLO описанный в файле проекта был доступен в файлах библиотеки?
#define TORUS_H_
string toRus(const string str)
{
if(str.length() >= 1) {
char buf[str.length()];
CharToOem(str.c_str(), buf);
return string(buf);
}
return str;
}
#endif
вот код. мне необходимо подключить стринг пишу #include<cstring>
и он все равно не реагирует. выдает ошибку:
4 D:\Dev-Cpp\ïðîãè\TORUS.cpp `string' does not name a type
может я чтот непраильно делаю. а вообще надо ли компилить этот файл?:confused:
Есть две разных библиотеки string, одна - для C, а вторая - для C++. Обе эти библиотеки можно использовать в программах на C++, первая подключается #include <cstring>, вторая - #include <string>. Какая именно вам нужна? :)
#define TORUS_H_
string toRus(const string str)
{
if(str.length() >= 1) {
char buf[str.length()];
CharToOem(str.c_str(), buf);
return string(buf);
}
return str;
}
#endif
вот код. мне необходимо подключить стринг пишу #include<cstring>
Судя по коду, вам нужна библиотека C++ (класс string - из этой библиотеки), но подключить вы пытаетесь библиотеку C. :D
4 D:\Dev-Cpp\ïðîãè\TORUS.cpp `string' does not name a type
может я чтот непраильно делаю. а вообще надо ли компилить этот файл?:confused:
Сообщение означает, что вы используете какой-то тип переменной, который не является встроенным и который не был объявлен ранее (в подключаемых библиотеках или вами). Надо библиотеку string из C++ подключать.
Но подключение библиотеки C++ - это еще не все. Надо учесть еще что класс string находится в пространстве имен (namespace) std. :)
Судя по коду, вам нужна библиотека C++ (класс string - из этой библиотеки), но подключить вы пытаетесь библиотеку C. :D
Сообщение означает, что вы используете какой-то тип переменной, который не является встроенным и который не был объявлен ранее (в подключаемых библиотеках или вами). Надо библиотеку string из C++ подключать.
Но подключение библиотеки C++ - это еще не все. Надо учесть еще что класс string находится в пространстве имен (namespace) std. :)
а порядок написания важен? на самом деле я пробовал по разному.
те мне адо написать чтото вроде:
#include<string>
using namespace std;
#define
#include<string>
#include<windows.h>
using namespace std;
#define TORUS_H_
string toRus(const string str)
{
if(str.length() >= 1) {
char buf[str.length()];
CharToOem(str.c_str(), buf);
return string(buf);
}
return str;
}
#endif
он мне вывел ошибку связывания:
[Linker error] undefined reference to `WinMain@16'
ld returned 1 exit status
Все догнал надо было сохранять в формате header(.h)
Благодарствую Ghox!!