А вот еще был случай...

Задал на уроке примитивную задачу на циклы: вывести на экран таблицу умножения на 5. Один паренек написал стандартную, в общем-то, вещь, которая, тем не менее, выводила на экран какой-то абсурд. Я минут 15 голову ломал. В чем ошибка?


#include <stdio.h>

int main(){

 int x = 5;
 int y;

 for(y = 1; y < 11; y++);
 {
  printf("%d x %d = %d", x, y, x * y);
 }

 return 0;
}

  • +3
  • 05 декабря 2009, 00:09
  • yababay

Комментарии (23)

RSS свернуть / развернуть
+
0
Нашел
avatar

Skriva

  • 05 декабря 2009, 00:51
+
0
На уровне инстинкта недоверия разнообразным компиляторам я бы не стал выполнять арифметику x * y
внутри printf("%d x %d = %d", x, y, x * y);
ввел бы int z;
z= x * y; printf("%d x %d = %d", x, y, z);
Но это только из мрачного опыта работы с С -компил… ми для
мелких контроллеров. Там нельзя городить красивые конструкции.
avatar

Markony

  • 05 декабря 2009, 13:24
+
0
Вот за что я и люблю Java, где одной строкой можно целую поэму написать.
avatar

yababay

  • 05 декабря 2009, 13:39
+
0
это точно писал я как то дополнение для одного сайта. Казалось что это тяжело. А взялся и сделал за пару часов. Java весч.
avatar

FREExLOADER

  • 05 декабря 2009, 13:45
+
0
ха ха ха мда чудо код прикольная ошибка
avatar

FREExLOADER

  • 05 декабря 2009, 13:28
+
0
Компилятора C под рукой нету
но подозреваю что ошибка таится в printf
x * y я бы вынес выше
и %d перепроверил

Я прав?
avatar

Gangsta

  • 05 декабря 2009, 21:30
+
+1
Да нет, всё проще и удивительнее . Пусть задачка повисит, кто знает ответ — не подсказывайте. Ответ вывешу в конце декабря в качестве новогоднего сюрприза.
avatar

yababay

  • 06 декабря 2009, 16:05
+
0
Надо попробовать скормить GCC
avatar

Gangsta

  • 06 декабря 2009, 16:38
+
0
Есть еще версия -заворотная комбинация параметров printf — X %d — что-то между двоичным и десят.-ым выводом...
avatar

Markony

  • 07 декабря 2009, 18:13
+
0
Неа
avatar

yababay

  • 07 декабря 2009, 22:25
+
0
А можно увидеть результат? что компилятор сворганил?
avatar

kuznecello

  • 08 декабря 2009, 08:37
+
0
Ну, это, наверно, будет очень большой подсказкой. Тем не менее:

5 * 11 = 55
avatar

yababay

  • 08 декабря 2009, 11:03
+
0
Неужели проблема с количеством знаков при выводе ?
avatar

Markony

  • 08 декабря 2009, 11:29
+
0
Кстати, А ГДЕ перенос строки?
avatar

Markony

  • 08 декабря 2009, 11:34
+
0
Да, пропустил перенос. В случае, если бы в программе не было ИСКОМОЙ ОШИБКИ таблица умножения слиплась бы в одну строку. Но это недочет, ошибка не в этом.

И еще я неточно ответил на вопрос kuznecello. Компилятор обрабатывает эту программу без ошибок. А вот сама она выводит на экран одну строку

5 * 11 = 55

вместо того, чтобы выводить таблицу умножения на 5.
avatar

yababay

  • 08 декабря 2009, 13:20
+
0
Все хорошие и умные книжки (особенно учебники) должны заканчиваться ПРАВИЛьным решением. И я бы себе зарубил на носу…
Ну…, ждемс… с… с…
avatar

Markony

  • 08 декабря 2009, 16:21
+
0
Вон же ответ выше
avatar

Sergei_T

  • 08 декабря 2009, 16:45
+
0
Ну, это не ответ. Ведь вопрос был: «ПОЧЕМУ эта программа выводит не таблицу умножения, а всего одну строку, да еще и с участием отсутствующего в таблице умножения числа 11?»

Должна-то выводить НЕ

5 * 11 = 55


Требовалось чтобы программа выводила

5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
5 * 10 = 50
avatar

yababay

  • 08 декабря 2009, 17:11
+
0
А исдохник, исдохник-то ?????
avatar

Markony

  • 08 декабря 2009, 17:28
+
0
Правильный исходник будет под Новый год, а то вдруг еще желающие поломать голову подтянутся?
avatar

yababay

  • 08 декабря 2009, 17:57
+
+1
Не утерпел — взял первый попавшийся свой компил.
Закомпилил. И -о ужас! Исходник почти такой-же ( правда с переносом ), а результат ПРАВИльный !? Правда ЭТО НЕ ГЦЦ…
avatar

Markony

  • 09 декабря 2009, 18:48
+
0
А ты скопипасть отсюда исходник. Гарантирую, что результат будет непраВИЛЬНЫЙ ;)
avatar

yababay

  • 09 декабря 2009, 21:24
+
0
Руки-то АВТОМАТОМ правильно набрали!
Сразу наткнулся!
ДА-А-А-А-А-… тот еще был случай...
avatar

Markony

  • 10 декабря 2009, 16:46

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.