Ввод целых однобайтных чисел - C (СИ)
Формулировка задачи:
Здраствуйте. Сегодня увидел некое странное поведение компилятора. Хочу собсно спросить, то ли я напартачил, то ли это компилятор не в своем уме. Отмечу, что пользуюсь средой DevC++ 4.9.9.2. то есть компилятор у меня gcc, если я не ошибаюсь.
И так приступим к сути проблемы. Есть код:
Ну, допустим ввожу я числа: 20, 30, 40 по очереди, как запрашивает программа. то есть х: 20, y: 30, z: 40. И, что Вы думаете выведется на екран? x = 20; y = 30; z = 40;? Угу я тоже так думал, а еще думал почему же это у меня программа неправильно рабоает?
а x = 0; y = 0; z = 40; не хотите? Да да имено таким будет вывод! Неожиданно правда? Я тоже такого не ожидал. Но факт есть факт. И скрин ему подверждение:
Но давайте глянем, что будет если поменять очередь ввода чисел, например сначала введем y, а потом уже x и z:
И так, вводим числа, например: 2, 4, 8. что изменилось? Ну да, порядок ввода и значения переменных измнились. Тут собсно против танка не попрешь - спорить не буду. Ну, а вывод на экран? "Ну, а что вывод на экран!?" - скажет Вам компилятор. А вывод как был неправильным, так и остался:
Идем дальше. "А давайте ка поставим ввод z в начало" - возможно скажите Вы, - "а потом уж x да y". А что? Давайте!
И так, меняем порядок ввода:
Значит, сменили порядок ввода, компилируем, запускаем программу, вводим: 1, 2, 3. Если Вы подумали, что программа на сей раз выдаст правильный результат, то Вы правильно подумали! Да, дествительно правльно, но... лишь на две третих, ибо вывод будет таковым:
В заключение скажу (дабы не плодить еще примеры кода и вывода), что такая вот беда будет, если переменные вводятся в том же порядке в котором их имена идут по алфавиту. Это касается переменных типа char, которые вводятся и выводятся как целые числа + имена котрых состоят из одной буквы. А вобще я пробовал чтото типо xdfas вместо x и программа работала так же некоректно. Не знаю с чем все это связано. Но мне кажется так не должно быть. И к стати, проблема эта возникает не на этапе использования(то есть ввода даном случае), а на этапе ввода чисел, потому и программа выполняется не правильно.
Если кто вкурсе почему именно так, или, что я делал не правильно, то пишите. Отмечу еще, что в том же файле у меня еще гдето 150 строчек кода было, но они не использовались в выше приведенной программе и как следствие на ход выполнения программы влиять не должны.
Хух. Фсе. Спасибо за внимание.
#include <stdio.h> #include <stdlib.h> int main(){ char x = -1, y = -1, z = -1; printf("enter x:"); scanf("%d", &x); printf("enter y:"); scanf("%d", &y); printf("enter z:"); scanf("%d", &z); printf("x = %d; y = %d; z = %d;\n",x,y,z); system("pause"); return 0; }
http://s2.ipicture.ru/uploads/20120921/ANRghILL.png
#include <stdio.h> #include <stdlib.h> int main(){ char x = -1, y = -1, z = -1; printf("enter y:"); scanf("%d", &y); printf("enter x:"); scanf("%d", &x); printf("enter z:"); scanf("%d", &z); printf("x = %d; y = %d; z = %d;\n",x,y,z); system("pause"); return 0; }
http://s2.ipicture.ru/uploads/20120921/a3qm4RJR.png
#include <stdio.h> #include <stdlib.h> int main(){ char x = -1, y = -1, z = -1; printf("enter z:"); scanf("%d", &z); printf("enter x:"); scanf("%d", &x); printf("enter y:"); scanf("%d", &y); printf("x = %d; y = %d; z = %d;\n",x,y,z); system("pause"); return 0; }
http://s2.ipicture.ru/uploads/20120921/X2VTezGR.png
Решение задачи: «Ввод целых однобайтных чисел»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int main(){ char x = -1, y = -1, z = -1; printf("enter x:"); scanf("%d", &x); printf("x = %d;\n",x); printf("enter y:"); scanf("%d", &y); printf("x = %d; y = %d; \n",x,y); printf("enter z:"); scanf("%d", &z); printf("x = %d; y = %d; z = %d;\n",x,y,z); system("pause"); return 0; }
Объяснение кода листинга программы
В этом коде считываются три целых однобайтных числа с помощью функции scanf. Затем они выводятся на экран с помощью функции printf. Каждое считанное число выводится в формате %d
, который является форматом для вывода целых чисел. Несмотря на то, что числа считываются как char, в данном случае они интерпретируются как int, поскольку в языке C не происходит автоматического приведения типов. Затем программа ожидает нажатия клавиши для выхода из консоли.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д