Вывод сообщения в той же строке C++
Написал код
#include <iostream>
#include <vector>
#include <cstdlib>
#include <filesystem>
using namespace std;
int main(int argc, char* argv[])
{
//шаблон ./a.out <пречисление ip через пробел> -i <перечисление интерфейсов через пробел> <путь к папке для сохранения результатов пингов> <количество сколько раз нужно повторять пинг>
if(argc<6){cerr<<"invalid argument"; exit(1);}
vector<string> gen, ips, intrs;
string str, path, times;
int mark=1, tm;
path=getenv("HOME");
path+="/";
path+= argv[argc-2];
std::filesystem::create_directories(path);
tm=atoi(argv[argc-1]);
if(tm<1){tm=1;;}
else{tm=atoi(argv[argc-1]);}
for(int i=mark; i<argc-2;i++){
str=argv[i];
if(str=="-i"){
i+=1;
for(mark=i;mark<argc-2;mark++){
str=argv[mark];
intrs.push_back(str);
}
}
ips.push_back(str);
}
for(int i=0;i<intrs.size();i++){
ips.pop_back();
}
for(int i=0; i<ips.size();i++){
for(int j=0;j<intrs.size();j++){
mark=0;
cout<< "starting ping. please wait\n";
while(mark<tm){
puts("#"); //<----'Как вывести # без перевода строки?'
system(("ping -I "+intrs[j]+" "+ips[i]+" -s 65000 -c 50 >>"+path+"/"+ips[i]+"_from_"+intrs[j]).c_str());
mark++;
}
cout << "ping "<<ips[i]<<" from "<<intrs[j]<<" "<<tm<<" times DONE\n";
system(("\ngrep 'loss' "+path+"/"+ips[i]+"_from_"+intrs[j]).c_str());
}
}
ips.clear();
ips.shrink_to_fit();
intrs.clear();
intrs.shrink_to_fit();
gen.clear();
gen.shrink_to_fit();
return 0;
}
Хочется мне, чтобы # выводилась как, например, при установке пакетов через какой-нибудь apt или yum в linux-е. Т.е в той же строке прибавлялась а не в следующей. Что то никак не могу додуматься. В коде коммент оставил, где именно выводится #.
Нужно чтоб каждый проход цикла while в вывод добавлялось #
Ответы (1 шт):
Автор решения: EOF
→ Ссылка
Функция puts автоматически переводит строку после отображения своего аргумента. Чтобы вывести один символ и не переводить строку можно написать так:
cout << '#';
или
cout.put('#');
Чтобы не ждать заполнения буфера и отобразить символ немедленно, необходимо сбросить буфер. Для этого необходимо использовать flush. Например так:
cout << '#' << flush;