LINUX.ORG.RU

Вывод и имя пользователя в терминале на одной строке

 , , , ,


0

1

Когда запускаю программу на c++, а именно на компиляторах clang или g++, сталкиваюсь с проблемой, что вывод происходит на одной строке с названием пользователя os, то есть: если я напишу код на вывод строки «12345» , то выведется: 12345[arthur@fedora vs]$. Около месяца назад перешел на fedora 38 и решил, что хочу наконец решить эту проблему. На windows все всегда было в порядке. Запускаю программу в обычном gnome-terminal. Версии g++ и clang самые последние( 13.1.1 и 16.0.6 ). Когда я делаю тоже самое, используя компилятор питона, у меня выводится все верно. Текст на одной строке, а на следующей уже имя пользователя os, как и при обычной работе в терминале. Пытался найти тему по этой проблеме, но не получилось. Если уже есть решение, то прикрепите ссылку, пожалуйста. Буду благодарен!

Перемещено hobbit из desktop

Ответ на: комментарий от pftBest

Базара нет все по фактам)

Но раз автор говорит, что пишет на c++ Я бы порекомендовал использовать std::endl, потом что это более «кросплатформенно»

romanlinux ★★★
()
Последнее исправление: romanlinux (всего исправлений: 1)
Ответ на: комментарий от pftBest

Это понятно, что именно так можно сделать перевод строки, но мне нужно было другое. Когда я сидел на windows, у меня имя пользователя os всегда писалось с новой строки, независимо от того, делал я ‘\n’ или нет. Теперь же не делая перевод строки у меня не переводит строку автоматом и имя пользователя os пишется сразу за сообщением. Запускаю код на питон: print(«Hello») я тоже не делаю ‘\n’, но имя пользователя os у меня начинает писаться с новой строки. То есть: printf(«12345») без перевода строки с g++ или clang: 12345[arthur@fedora vs]$

print(«12345») без перевода строки с python: 12345 [arthur@fedora python vs code]$ (в примере с python есть пробел и это не просто пробел, а перевод на новую строку, так сказать, то есть эти два сообщения, разделенные пробелом, написаны на разных строках)

Я хотел и хочу узнать, почему при сборке и запуске кода на с++ с выше указанными компиляторами не пишется имя пользователя os с новой строки. Можно ли это как-то добавить, чтобы было как на python.

ArturKKK
() автор топика
Ответ на: комментарий от ArturKKK

функция print() из питона добавляет символ '\n' всегда автоматически хочешь этого или нет. В низкоуровневых языках так не принято и нужно ставить '\n' вручную. Потому что могут быть варианты когда тебе перевод строки не нужен.

В питоне чтобы избавится от перевода строки нужно использовать write()

import sys
sys.stdout.write("12345")

Если попробуешь то будет такое же поведение как в C.

А то что винда переводит строку после завершения процесса это не по стандарту и на это расчитывать плохая идея.

pftBest ★★★★
()
Ответ на: комментарий от bugfixer

А что, нынче на оффтопике widen(‘\n’) разворачивается во что надо?

Да.

When writing to a file, device node, or socket/fifo in text mode, ‘\n’ is transparently translated to the native newline sequence used by the system, which may be longer than one character.

rupert ★★★★★
()

вывод происходит на одной строке с названием пользователя os

Это не название пользователя, а приглашение ввести команду для интерпретатора команд, в данном случае - shell (bash). И на какой строке завершилась предыдущая программа он понятия не имеет, об этом должна позаботиться предыдущая программа. Просто тот же Python эту работу делает за вас, а другие полагают, что перевод строки должен явно указать программист. Вы же не орёте на браузер, когда у одного сайта все отступы идеально идут, а у другого всё в одну строку. Так и здесь.

vogisi
()