Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
266 / 192 / 50
Регистрация: 16.06.2014
Сообщений: 424
1

Почему работает по-разному?

17.06.2014, 16:33. Показов 1156. Ответов 10
Метки нет (Все метки)

Почему работает по-разному?
C
1
2
cout << "Hello, world! \n";  
printf("%s\n","By, world!");
By, world!
Hello, world!
C
1
2
cout << "Hello, world!" << endl;  
printf("%s\n","By, world!");
Hello, world!
By, world!

Добавлено через 10 минут
Глюк именно VC6 - на 7.1
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.06.2014, 16:33
Ответы с готовыми решениями:

Почему табуляция работает по-разному?
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; int main...

Почему табуляция происходит по-разному?
#include &quot;stdio.h&quot; main() { int fahr, celsius; int lower, upper, step; lower = 0; upper =...

Не понимаю, почему код выполняется по-разному
Собственно, код: typedef struct { char stack; int current; } char_stack; int main()...

Один и тот же код на Си и Паскале работает по-разному!
Задача: найти в массиве наидлиннейшую цепочку отрицательных элементов, вырезать её и вставить в...

10
58 / 58 / 22
Регистрация: 12.02.2014
Сообщений: 108
17.06.2014, 16:36 2
Я слышала про такой же глюк в какой-то из версий Visual Studio =)
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10912 / 6838 / 1625
Регистрация: 25.07.2009
Сообщений: 12,543
17.06.2014, 18:09 3
Сами вы глюки! endl - это не просто символ новой строки, а таки целый макрос, который содержимое из буфера в поток отправляет. А вообще очень нездоровая идея смешивать вывод в стиле С и С++ в одной программе. Хуже разве-что malloc/free вперемешку с new/delete...
2
266 / 192 / 50
Регистрация: 16.06.2014
Сообщений: 424
17.06.2014, 23:52  [ТС] 4
Ну, это вопрос с собеседования. И хотелось бы знать, почему происходит подобная вещь. Очевидно, что особенность работы команды. И почему не во всех компиляторах это наблюдается.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10912 / 6838 / 1625
Регистрация: 25.07.2009
Сообщений: 12,543
18.06.2014, 00:06 5
Лучший ответ Сообщение было отмечено HighPredator как решение

Решение

Цитата Сообщение от Iriini Посмотреть сообщение
И хотелось бы знать, почему происходит подобная вещь.
Вывод каждого символа происходит не сразу на консоль или в файл, сначала в буфер, который по мере заполнения весь оптом и выводится. Потоки в С и в С++ используют разные буферы и работают независимо одни от других, по своей логике, определённой разработчиками компилятора. По этому и нельзя смешивать вывод С и С++ - абсолютно непредсказуемо, как оно отработает.
Вы попробуйте пример изменить так:
C++
1
2
cerr << "Hi, World!\n";
fprintf(stderr, "Bye, World!\n");
посмотрите, что получится...
1
HighPredator
18.06.2014, 09:00
  #6

Не по теме:

Цитата Сообщение от Iriini Посмотреть сообщение
Ну, это вопрос с собеседования
Всегда тащился с таких вопросов на собеседованиях. Ровно ноль практической пользы.

0
266 / 192 / 50
Регистрация: 16.06.2014
Сообщений: 424
18.06.2014, 16:43  [ТС] 7
Всегда тащился с таких вопросов на собеседованиях. Ровно ноль практической пользы.
Полезно знать. Такие вопросы и показывают глубину понимания, а не формальное знание синтаксиса.
0
543 / 376 / 56
Регистрация: 23.06.2013
Сообщений: 1,181
Записей в блоге: 6
18.06.2014, 17:00 8
Цитата Сообщение от Iriini Посмотреть сообщение
Полезно знать. Такие вопросы и показывают глубину понимания, а не формальное знание синтаксиса.
Отвечу этой цитатой:
Есть языки программирования с очень длинной и непростой историей, у которых примерно половина их возможностей – это какие-то исторически сложившиеся сложные и ненужные костыли. К таким, например, относится и наш любимый C++. Если вы не разработчик компилятора C++, почти всегда можно найти что-то, чего вы в языке не знаете. Просто непонятно, зачем это могло бы вам понадобиться.
Задачи на собеседованиях в Яндексе
2
266 / 192 / 50
Регистрация: 16.06.2014
Сообщений: 424
18.06.2014, 17:09  [ТС] 9
Мне это кажется интересным. И полезным
За задачи - спасибо.
0
HighPredator
19.06.2014, 00:00
  #10

Не по теме:

Цитата Сообщение от Iriini Посмотреть сообщение
Такие вопросы и показывают глубину понимания, а не формальное знание синтаксиса.
Глубина понимания здесь вообще не при чем. Поймите, вот это называется implementation-defined behaviour. Да, формально стандарт требует, чтобы и cout и printf были механически одинаково завязаны на stdout. Но это пока еще не во всех компиляторах реализовано (я не знаю даже есть ли вообще такие, где оно сделано). Поэтому, единственное, что реально показывает данный вопрос - это знание работы конкретного компилятора на конкретном примере. Практической пользы тут мало, поскольку практик точно не станет делать так. Это я к тому, чтобы вы научились для себя разграничивать: есть вещи которые стоит запихать в голову накрепко, а есть те, которые стоит один раз/прочитать/услышать/записать и не зацикливаться. В деятельности программиста это очень важно, а то голова лопнет. Такие дела.

0
266 / 192 / 50
Регистрация: 16.06.2014
Сообщений: 424
19.06.2014, 10:37  [ТС] 11
HighPredator, никто и не говорит, что это надо запоминать. Просто любопытно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.06.2014, 10:37

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

почему в разных ОС по разному работает IntelliJ
Привет всем! собственно сабж, далее вкладываю два скриншота: 1) ОС Линукс Дебиан 8 2) ОС Винда...

Почему функция strchr по разному работает при разных строках?
Только начал изучать С. Пользую Borland C++ v.3.1 Нужно работать со строками. Вот стандартный...

Почему в WEB приложении и в обычном один и тот же код по разному работает?
static Boolean Auth(String data) { String dbURL =...

Почему для Double и для Integer переполнение работает по разному?
забавный код System.out.println(Double.MAX_VALUE+23414 == Double.MAX_VALUE);//true...


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

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

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