Помогите найти ошибку
т. е. прога должна
а. проверить не ввёл-ли пользователь пробел
б. сконвертить введёный стринг в double
код
char *note_char;
...
do
{
cin(note_char);
if (note_char!=" ")
note[x][y]=atof(note_char);
...
}
while (note_char!=" ");
При компиляции никаких ошибок. Но в итоге прога не работает и виснет. Дебаг показал что у всех переменных нормальные (ожидаемые) значения.
где я ошибся?
char note_char;
...
do
{
note_char = (char) _getch();
if (note_char!=' ')
note[x][y]=atof(note_char);
...
}
while (note_char!=' ');
не уверен но попробуй так.
во первых нужно сразу обявлять
char *note_char;
для этой строки
note[x][y]=atof(note_char);
(либо пишет cannot convert parameter 1 from 'char' to 'const char *')
и так далее. ошибок много звязанных иммено с этой фичей (кажется это называется пойнтер )
char *note_char;
...
do
{
cin(note_char);
if (note_char!=" ")
note[x][y]=atof(note_char);
...
}
while (note_char!=" ");
cin пустые (с пробелами и пр.) строки не возвращет.
Под чему равны x,y???
Вот это врятли когда-нибудь не выполниться
note_char!=" ", т.е. note_char скорее всего всегда будет не равен " ", т.к. производится сравнение адресов.
Вот что надо
читаем double'ы пока юзверг не введёт строку "end"
#include <iostream>
#include <string.h>
#include <memory.h>
using namespace std;
int main(int argc, char* argv[])
{
char c[32];
do
{
cin.width( 31 );
cin >> c;
strlwr(c);
if (strcmp(c, "end")!=0)
break;
cout << "c = " << atof(c) << endl;
}while(1);
return 0;
}
вот тебе код который тебе нужен
int a = 0, i = 0;
char buffer[80];
while( a != 32 )
{
a = getche();
buf[i++] = a;
}
buf = '\0';
дальше нужно сконвертировать этот буффер
думаю с этим у тебя проблем нет
Удачи.!
Если сработает, дай знать.
On 2002-04-02 2208, Arestov wrote
[quote]
char *note_char;
...
do
{
cin(note_char);
if (note_char!=" ")
note[x][y]=atof(note_char);
...
}
while (note_char!=" ");
cin пустые (с пробелами и пр.) строки не возвращет.
Под чему равны x,y???
Вот это врятли когда-нибудь не выполниться
note_char!=" ", т.е. note_char скорее всего всегда будет не равен " ", т.к. производится сравнение адресов.
Вот что надо
читаем double'ы пока юзверг не введёт строку "end"
#include <iostream>
#include <string.h>
#include <memory.h>
using namespace std;
int main(int argc, char* argv[])
{
char c[32];
do
{
cin.width( 31 );
cin >> c;
strlwr(c);
if (strcmp(c, "end")!=0)
break;
cout << "c = " << atof(c) << endl;
}while(1);
return 0;
}
[/quote]
Привет Арестов,
где ты там видел сравнение адресов ??
у него вся проблема заключалась в том, что cin не возвращал управление, пока пользователь не нажал клавишу Enter.
для этого, ему нужно просто брать каждый символ и сравнить с " "
удачи !
код
char *note_char;
...
do
{
cin(note_char);
if (note_char!=" ")
note[x][y]=atof(note_char);
интересно а кто выделяет память под note_char?
imho ошибка в этом
On 2002-04-03 1009, zorg wrote
Привет Арестов,
где ты там видел сравнение адресов ??
Вот где
char *note_char;
....
while (note_char!=" ");
у него вся проблема заключалась в том, что cin не возвращал управление, пока пользователь не нажал клавишу Enter.
cin не вернёт управление пока юзер что-нить не введёт и нажмёт Enter, по крайней мере в моей версии STL.
т.е. моя STL предполагает ws(cin)
для этого, ему нужно просто брать каждый символ и сравнить с " "
вот моя STL не вернёт " ", а только непустые строки, которые помимо \t\n и пробела имеют что-то ещё.