Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Seryoga_93
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 19
#1

Не выполняется (проскакивает) оператор - C++

19.09.2013, 23:21. Просмотров 534. Ответов 9
Метки нет (Все метки)

Здравствуйте! Я новичок в С. Простите за наиглупейший вопрос, но почему так? В простейшем консольном приложении после считывания переменных и вычисления значения r, программа игнорирует считывание Z, сама присваивает ему какое-то значение из x/y и выводит? В паскале такого бы не было. Чего я не понимаю?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
 
main()
{
float x,y,r,z;
 
printf("X,Y>> ");
scanf("%f",&x,&y);
r=x+y;
printf("\nR: %.2f\n\n", r);
 
printf("\nZ>> ");
scanf("%f",&z); 
printf("\n%.2f\n\n",z);
 
system("PAUSE");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2013, 23:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не выполняется (проскакивает) оператор (C++):

Не выполняется оператор IF - C++
Программа компилируется и выполняется без ошибок, но условие в строке 29 не отрабатывается. Почему так? #include &lt;iostream&gt; #include...

Непонятно выполняется оператор if - C++
Собственно вопрос очень глупый, наткнулся на такой код в теме: int main() { setlocale(LC_ALL, &quot;Russian&quot;); int n; ...

Почему-то не выполняется оператор цикла - C++
#pragma hdstop #include &lt;stdio.h&gt; #include &lt;conio.h&gt; int main() { int far; for(far=0; far&lt;=300; far=far+20); ...

Не выполняется перегруженный оператор присваивания - C++
Подскажите пожалуйста, почему ругается компилятор? Я только начал изучать С++ по книге Шилдта, и там написана вот эта программа. В 93...

Неправильно выполняется условный оператор - C++
Доброго времени суток, нужна помощь. При вводе пользователем переменной b переменная a увеличивается не на 2, как подразумевается, а на 1....

Проскакивает getline - C++
Программа игнорирует первый ввод. Client obj; cout &lt;&lt; &quot;Name: &quot;; getline(cin, obj.Name); cout &lt;&lt; '\n'; cout &lt;&lt; &quot;Last...

9
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
19.09.2013, 23:41 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <conio.h>
 
main()
{
float x,y,r,z;
 
printf("X,Y>> ");
scanf("%f%f",&x,&y);
r=x+y;
printf("\nR: %.2f\n\n", r);
 
printf("\nZ>> ");
scanf("%f",&z); 
printf("\n%.2f\n\n",z);
 
system("PAUSE");
}
1
ValeryS
Модератор
6707 / 5116 / 482
Регистрация: 14.02.2011
Сообщений: 17,188
19.09.2013, 23:43 #3
Цитата Сообщение от Seryoga_93 Посмотреть сообщение
scanf("%f",&x,&y);
вот здесь та даешь команду считать одну переменную "%f"
а адрес даешь двух &x,&y
1
Байт
Эксперт C
16544 / 10814 / 1639
Регистрация: 24.12.2010
Сообщений: 20,862
19.09.2013, 23:55 #4
Цитата Сообщение от kravam Посмотреть сообщение
scanf("%f%f",&x,&y);
Вот здесь между %f %f неплохо бы пробельчик вставить, или там запятую...
1
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
19.09.2013, 23:56 #5
и так сойдёт
1
Seryoga_93
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 19
20.09.2013, 10:18  [ТС] #6
О, и впрямь! Про это я не подумал. То есть, когда вместе указываешь спецификацию для нескольких переменных, то надо и вводить их через тот же символ, через который они стоят - так? теперь второй запрос видит) всем спасибо!
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
20.09.2013, 16:53 #7
Цитата Сообщение от Seryoga_93 Посмотреть сообщение
то надо и вводить их через тот же символ, через который они стоят - так?
Нет, не так. Если между %f и %f не будет никаких символов (и пробела), то вводить всё равно надо через пробел. А чё сам не попробовал?
2
Seryoga_93
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 19
23.09.2013, 22:06  [ТС] #8
Да я вообще сперва не обратил на это внимания) Ну а щаз что не так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream.h>
#include <conio.h>
using namespace std;
 
main()
{
bool c;
 scanf("%d",&c);
 if(c==true) cout<<"\nTRUE: "<<c<<"\n" ; else cout<<"FALSE: "<<c;
 
getch();
}
По идее в типе bool все целочисленные значение >=1 позиционируются как ТРУ, почему, когда я проверяю переменную через ==true - он мне выдает на все значения кроме "1" ложь! а когда пишешь просто if(c) ... то все нормально ГДЕ ЛОГИКА?!
0
SatanaXIII
Супер-модератор
Эксперт С++
5618 / 2653 / 246
Регистрация: 01.11.2011
Сообщений: 6,549
Завершенные тесты: 1
24.09.2013, 10:39 #9
Цитата Сообщение от Seryoga_93 Посмотреть сообщение
в типе bool все целочисленные значение >=1 позиционируются как ТРУ
А так же <=1

Цитата Сообщение от Seryoga_93 Посмотреть сообщение
почему, когда я проверяю переменную через ==true - он мне выдает на все значения кроме "1" ложь
Потому, что так и есть. В условии if сравнивается значение переменной с с true, где true обратно конвертируется в единицу. Под переменную типа bool отводится один байт, следовательно туда можно поместить 256 значений, и только одно из них будет равным единице.

Цитата Сообщение от Seryoga_93 Посмотреть сообщение
когда пишешь просто if(c) ... то все нормально
Потому что в условии if автоматически происходит обратное преобразование целочисленного значения в булевское.

Вот попробуйте вот такую штуку:
C++
1
2
3
int i;
 scanf("%d",&i);
 if((bool)i==true) cout<<"TRUE: "<<i ; else cout<<"FALSE: "<<i;
Или вот такой винегрет:
C++
1
2
3
bool c;
 scanf("%d",&c);
 if((bool)(int)c==true) cout<<"TRUE: "<<c ; else cout<<"FALSE: "<<c;
0
Seryoga_93
0 / 0 / 0
Регистрация: 19.09.2013
Сообщений: 19
24.09.2013, 20:38  [ТС] #10
Спасибо, теперь более понятно. Это потому что я вводил:
C++
1
2
bool c;
  scanf("%d",&c);
и %d позиционировал ввод как целочисленное? потому что то же самое через cin при сравнении c==true нормально все тоже было - значит уже разные цифры конвертировались в логическую 1/0???
0
24.09.2013, 20:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2013, 20:38
Привет! Вот еще темы с ответами:

Не выполняется логический оператор && - C++
Добрый день. В данном коде #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;cstdlib&gt; using namespace std; int main(){ ...

Компилятор проскакивает инструкцию - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &quot;Person_Name.h&quot; int _tmain(int argc, _TCHAR* argv) { ...

Проскакивает чтение с клавиатуры - C++
Здравствуйте! Подскажите. Почему вконце (на cin.get(s,100);) приложение просто проскакивает ввод с клавиатуры. Просто не ждет ввода, а...

Программа проскакивает с ошибкой. Одномерный массив - C++
В функции сортировки переменные выходят за предельные рамки И программа завершается с кодом 0 В одномерном массиве, состоящем из n...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru