Из интернета "достал" три функции из интернета по теме : "ввод только чисел".
/* Чтение целого числа */
int getInteger()
{
int number;
char c; /* Временная переменная для проверки ввода */
/* Бесконечный цикл, работающий до момента удачного считывания */
while (1)
{
/* Читаем поток ввода, необходимо число завершаемое
* символом перевода на новую строку и никак иначе
*/
if (!scanf("%d", &number) || getchar() != '\n')
{
/* Очистка потока от оставшихся после чтения символов
* для предотвращения их прочтения следующимим вызовами scanf
*/
while ((c = getchar()) != '\n' && c != EOF);
}
else return number;
printf("Необходимо ввести число.\nПовторите ввод: ");
}
}
// Use setlocale(LC_NUMERIC, "C") for period delimeter.
double getDouble()
{
double number;
char c;
while (1)
{
if (!scanf("%lf", &number) || getchar() != '\n')
{
while ((c = getchar()) != '\n' && c != EOF);
}
else return number;
printf("Необходимо ввести число.\nПовторите ввод: ");
}
}
long getTime()
{
int hours, minutes;
char c;
while (1)
{
if (scanf("%d:%d", &hours, &minutes) < 2 || getchar() != '\n')
{
while ((c = getchar()) != '\n' && c != EOF);
}
else if (hours >= 0 && hours <= 23 && minutes >= 0 && minutes <= 59)
{
return hours * 60 + minutes;
}
printf("Необходимо время в формате HH:MM.\nПовторите ввод: ");
}
}
При вводе чисел всё шикарно, вводить можно только числа.
НО вот проблема когда я попробовал вводить числа для последующей работы с ними то получал не число, а будто бы "ссылку"
int main()
{
setlocale(LC_NUMERIC, "C");
// ввести число
double X[3]; double Y[3]; // переменные (массивы) для ввода
memset(X,0,sizeof(X)); memset(Y,0,sizeof(Y)); // зануляем переменные(массивы)
std::cout<< "Введите числа векторов \n" << "------------------------ \n";
int i = 0; double value =0; //t int i1 =0; bool b_t =false;
for(i =0; i<3; i++){
printf("Введите X %d-вого вектора :", i+1);
value=getDouble(); X[i] = value; printf(" !! %d !! ", value);
printf("Введите Y %d-вого вектора :", i+1);
value=getDouble(); Y[i] = value; printf(" !! %d !! ", value);
}
//double *value1= (double *)malloc(256);
//value1=getDouble(); printf("!!!!!%d!!!!!:", value1);
int value1 =0;
for(i =0; i<3; i++){
printf("Введите X %d-вого вектора :", i+1);
value1=getInteger(); printf(" !! %d !! ", value1);
printf("Введите Y %d-вого вектора :", i+1);
value1=getInteger(); printf(" !! %d !! ", value1);
}
long value2 =0;
for(i =0; i<3; i++){
printf("Введите X %d-вого вектора :", i+1);
value2=getInteger(); printf(" !! %d !! ", value2);
printf("Введите Y %d-вого вектора :", i+1);
value2=getInteger(); printf(" !! %d !! ", value2);
}
for(i =0; i<=2;i++){
printf("Вектор %d : X= %d, Y= %d \n" ,i+1, X[i], Y[i]);
}
Вот результат :
Введите числа векторов
------------------------
Введите X 1-вого вектора :1
!! 10 !! Введите Y 1-вого вектора :2
!! 10 !! Введите X 2-вого вектора :3
!! 10 !! Введите Y 2-вого вектора :4
!! 10 !! Введите X 3-вого вектора :5
!! 10 !! Введите Y 3-вого вектора :6
!! 10 !! Введите X 1-вого вектора :7
!! 7 !! Введите Y 1-вого вектора :8
!! 8 !! Введите X 2-вого вектора :9
!! 9 !! Введите Y 2-вого вектора :11
!! 11 !! Введите X 3-вого вектора :12
!! 12 !! Введите Y 3-вого вектора :13
!! 13 !! Введите X 1-вого вектора :14
!! 14 !! Введите Y 1-вого вектора :15
!! 15 !! Введите X 2-вого вектора :16
!! 16 !! Введите Y 2-вого вектора :17
!! 17 !! Введите X 3-вого вектора :18
!! 18 !! Введите Y 3-вого вектора :19
!! 19 !! Вектор 1 : X= 0, Y= 0
Вектор 2 : X= 0, Y= 0
Вектор 3 : X= 0, Y= 0
getDouble()
почему то возвращает только десять , плюс к всему совершенно не кладёт в массивы X
Y
данные.
Совершенно не могу понять почему так ???
Решил "подсмотреть" как пишут мастера (полный справочник по СИ/ СИ плюс плюс ) Герберт Шилдт.
Вот код:
//!!!!!!!!!!!!!!!!!!!!!!!
printf("\n!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
double v; double j;
printf("input chislo:");
scanf("%e", &v);
printf("input chislo:");
scanf("%e", &j);
printf ("V = %d,J = %d ", v, j);
printf("\n!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
//!!!!!!!!!!!!
printf("--------------------------\n");
int v1; int j1;
printf("input chislo:");
scanf("%o%x", &v1, &j1);
printf ("V = %0,J = %x ", v1, j1);
printf("\n------------------------\n");
//!
Вот вывод :
!!!!!!!!!!!!!!!!!!!!!!!!!!
input chislo:21
input chislo:31
V = -502073136,J = 0
!!!!!!!!!!!!!!!!!!!!!!!!!!
--------------------------
input chislo:2
3
V = %0,J = 2
------------------------
Какая-то белиберда :(
Спасибо @eanmos Поправил :3
Ошибался с выводом в printf
выводил %d
надо было использовать %f
Вот код :
// ввести число
double X[3]; double Y[3]; // переменные (массивы) для ввода
// memset(X,0,sizeof(X)); memset(Y,0,sizeof(Y)); // зануляем переменные(массивы)
std::cout<< "Введите числа векторов \n" << "------------------------ \n";
int i = 0; double value =0; //t int i1 =0; bool b_t =false;
for(i =0; i<3; i++){
printf("Введите X %d-вого вектора :", i+1);
value=getDouble(); X[i] = value; printf(" !! %f !! ", value);
printf("Введите Y %d-вого вектора :", i+1);
value=getDouble(); Y[i] = value; printf(" !! %f !! ", value);
}
int Q[3];
Q[0] = value; Q[1] = value; Q[2] = value;
for(i =0; i<=2;i++){
printf("Вектор %d : X= %f, Y= %f \n" ,i+1, X[i], Y[i]);
printf("Вектор %d : Q= %d. \n" ,i+1, Q[i]);
}
Вот результат:
Введите числа векторов
------------------------
Введите X 1-вого вектора :212
!! 212.000000 !! Введите Y 1-вого вектора :23
!! 23.000000 !! Введите X 2-вого вектора :32
!! 32.000000 !! Введите Y 2-вого вектора :123
!! 123.000000 !! Введите X 3-вого вектора :
432
!! 432.000000 !! Введите Y 3-вого вектора :
545
!! 545.000000 !! Вектор 1 : X= 212.000000, Y= 23.000000
Вектор 1 : Q= 545.
Вектор 2 : X= 32.000000, Y= 123.000000
Вектор 2 : Q= 545.
Вектор 3 : X= 432.000000, Y= 545.000000
Вектор 3 : Q= 545.
шильдовским вариантом не пользуйтесь при вводе 2123йуц231
он выведет 2123
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
подскажите пожалуйста, в чем может быть проблема: если делаюonsubmit не в теге формы, то выполняется аякс, но все равно идет редирект на php файл,...
Запилил слайдер! Мне нужно в активный слад вставить блок и нужно сделать это по атрибуту indexВот что я написал: