Народ помогите разобраться с этим кодом уже 2 часа с ним парюсь. (всякая ненужная фигня вырезанна)
int main(int argc, char* argv[])
{
char com[80];
while(1)
{
cout<<"# ";
gets(com);
int iret=command(com);
if (iret==2) break;
cout<<"\n\n";
}
return 0;
}
int command(char *s)
{
char * pch;
pch = strtok (s," ");
while (pch != NULL)
{
if(!strcmp("-add",pch))
{
pch = strtok (NULL, " ");
if (pch)
{
if (!strcmp("s",pch))
{
pch = strtok (NULL, " ");
add_stud(pch);
break;
}
}
cout<<"To get help about command put -help add";
return 1;
}
if(!strcmp("-exit",pch) || !strcmp("-quit",pch))
{
cout<<"Good Buy\n";
return 2;
}
pch = strtok (NULL, " ");
}
cout<<"Command is not supported! Put -help to get Help";
return 0;
}
int add_stud(char *n)
{
char t[80];
int i5Valu[5];
cout<<"EnterFIO\n";
cin>>t;
cout<<"Enter 5 Values\n";
return 1;
}
дело в том что если мы вводим
-add s 1
Вместо 1 может быть что угодно суть не в этом.
То на экране появляется запрос на ввод FIO
НО когда мы вводим фио и нажимаем ентер то у нас появляются 2 лишние строки с сообщением
Command is not supported! Put -help to get Help
Откуда????? они там берутся не как немогу догнать.
Вот что выводиться на экран.
# -add s 1
EnterFIO
asdsad
Enter 5 Values
Command is not supported! Put -help to get Help
# Command is not supported! Put -help to get Help
#
Здравствуйте, a1ien.n3t, Вы писали:
AN>Народ помогите разобраться с этим кодом уже 2 часа с ним парюсь. (всякая ненужная фигня вырезанна) AN>
AN>int command(char *s)
AN>{
AN> char * pch;
AN> pch = strtok (s," ");
AN> while (pch != NULL)
AN> {
AN> if(!strcmp("-add",pch))
AN> {
AN> pch = strtok (NULL, " ");
AN> if (pch)
AN> {
AN> if (!strcmp("s",pch))
AN> {
AN> pch = strtok (NULL, " ");
AN> add_stud(pch);
AN> break;/* 1 */
AN> }
AN> }
AN>
AN> cout<<"To get help about command put -help add";
AN> return 1;
AN> }
AN> if(!strcmp("-exit",pch) || !strcmp("-quit",pch))
AN> {
AN> cout<<"Good Buy\n";
AN> return 2;
AN> }
AN> pch = strtok (NULL, " ");
AN> }
AN>
AN> cout<<"Command is not supported! Put -help to get Help";
AN> return 0;/* 2 */
AN>}
AN>НО когда мы вводим фио и нажимаем ентер то у нас появляются 2 лишние строки с сообщением AN>
Command is not supported! Put -help to get Help
AN>Откуда????? они там берутся не как немогу догнать.
тоесть откуда ?
break в пункте /* 1 */ выкидывает из цикла while, и потом выход из функции в точке /* 2 */ с выводом сообщения.
компьютер делает ровно то, что Вы ему велели, но это может отличаться от того, что Вы имели ввиду. (с)
Дак как он может фходить в цикле while еще раз в функцию command после того как я выпрыгиваю из нее.
Он почемуто проскакивает gets после того как мы выпрыгиваем из command.
Здравствуйте, a1ien.n3t, Вы писали:
AN>Народ помогите разобраться с этим кодом уже 2 часа с ним парюсь. (всякая ненужная фигня вырезанна) AN>[СCODE]int main(int argc, char* argv[]) AN>{
AN> char com[80]; AN> while(1) AN> { AN> cout<<"# "; AN> gets(com); AN> int iret=command(com); AN> if (iret==2) break; AN> cout<<"\n\n"; AN> } AN> return 0; AN>}
AN>int add_stud(char *n) AN>{ AN>char t[80]; AN> int i5Valu[5]; AN> cout<<"EnterFIO\n"; cin>>>t; AN> cout<<"Enter 5 Values\n"; AN> return 1; AN>}[/СCODE]
AN>дело в том что если мы вводим AN>
-add s 1
AN>Вместо 1 может быть что угодно суть не в этом. AN>То на экране появляется запрос на ввод FIO AN>НО когда мы вводим фио и нажимаем ентер то у нас появляются 2 лишние строки с сообщением AN>
Command is not supported! Put -help to get Help
AN>Откуда????? они там берутся не как немогу догнать.
Мне кажется дело в том, что в функции add_stud cin>>t считывает слово до первого разделителя, оставляя последний в потоке ввода. Т.е в данном случае, после cin>>t в потоке остается символ перевода строки, который потом считывается функцией gets в main.
Здравствуйте, a1ien.n3t, Вы писали:
AN>Дак как он может фходить в цикле while еще раз в функцию command после того как я выпрыгиваю из нее. AN>Он почемуто проскакивает gets после того как мы выпрыгиваем из command.
Внимай. Твоя проблема в cin>>t;
Эта комманда вычитывает из stdin строку, но оставляет там символ новой строки.
Последующая чуть позже команда gets берет этот символ.
Решение: вставь перед gets команду fflush(stdin) либо считывай данные какими-либо другими командами.