Как я могу добавить горизонтальное пространство между двумя функциями в C ?

#c #vector #output

Вопрос:

Поэтому я хочу вывести список имен и случайно сгенерированных номеров. Я уже сделал все остальное, просто я не знаю, как вывести это так, как я хочу.

Я хочу, чтобы он выводился следующим образом:

 ID #: Names:  1 bob 23 rob 44 kanye  

Вот что у меня есть до сих пор:

 cout lt;lt; "Would you like to view the archived names and IDs? (Y/N)" lt;lt; endl;  string archiveInput;  cin gt;gt; archiveInput;  if(tolower(archiveInput[0]) == 'y')  {  cout lt;lt; "ID #: Names: " lt;lt; endl;    output(ids, names);    }  

Вот мои функции, которые я использовал.

 void output(const vectorlt;intgt;amp; ids) {  for(int i = 0; i lt; ids.size(); i  )  {  cout lt;lt; ids[i] lt;lt; endl;  }  cout lt;lt; endl; }  void output(const vectorlt;stringgt;amp; names) {  for(int i = 0; i lt; names.size(); i  )  {  cout lt;lt; names[i] lt;lt; endl; //might have to use endl for list format  }  cout lt;lt; endl; }  void output(const vectorlt;intgt;amp; ids, const vectorlt;stringgt;amp; names) {  cout lt;lt; output(ids) lt;lt; " " lt;lt; output(names); //I thought this would work, im new :( }  

Комментарии:

1. может быть, сначала попробуем что-нибудь другое. как бы вы написали это от руки, если бы могли писать только сверху вниз и слева направо?

Ответ №1:

Попробуйте использовать этот метод

 #include lt;iostreamgt; #include lt;iomanipgt;  using namespace std;  class Student { public:  string studentName;  int studentAge;  int studentMarks;  int admissionYear;   Student(string name, int age, int marks, int year)  {  studentName = name;  studentAge = age;  studentMarks = marks;  admissionYear = year;  } };  int main() {  Student studentArray[4] = {Student("Alex", 20, 80, 2018), Student("Bob", 21, 82, 2018), Student("Chandler", 23, 85, 2017), Student("Rose", 18, 89, 2019)};   cout  lt;lt; left  lt;lt; setw(10)  lt;lt; "Name"  lt;lt; left  lt;lt; setw(5)  lt;lt; "Age"  lt;lt; left  lt;lt; setw(8)  lt;lt; "Marks"  lt;lt; left  lt;lt; setw(5)  lt;lt; "Year"  lt;lt; endl;   for (int i = 0; i lt; 4; i  )  {  cout  lt;lt; left  lt;lt; setw(10)  lt;lt; studentArray[i].studentName  lt;lt; left  lt;lt; setw(5)  lt;lt; studentArray[i].studentAge  lt;lt; left  lt;lt; setw(8)  lt;lt; studentArray[i].studentMarks  lt;lt; left  lt;lt; setw(5)  lt;lt; studentArray[i].admissionYear  lt;lt; endl;  }  return 0; }  

Он напечатает вывод ниже :

 Name Age Marks Year Alex 20 80 2018 Bob 21 82 2018 Chandler 23 85 2017 Rose 18 89 2019  

Мы установили разную ширину для каждого столбца. Ширина первого столбца равна 10, ширина второго столбца равна 5, ширина третьего столбца равна 8, а ширина последнего столбца равна 5.

Здесь важна ширина. Если он меньше размера содержимого, содержимое будет переполнено.

Комментарии:

1. Пожалуйста, объясните свой ответ.

2. Не большой поклонник магии и, казалось бы, произвольных чисел. Но это, вероятно, достаточно хорошо подходит ОП.

3. Спасибо! Не думал, что это будет так сложно, но это должно сработать!

Ответ №2:

 cout lt;lt; output(ids) lt;lt; " " lt;lt; output(names);  

Сначала запускается вывод функции, перегруженный аргументом ids, а после wards запускается версия с такими именами:

 for(int i = 0; i lt; ids.size(); i  ) {  cout lt;lt; ids[i] lt;lt; endl; } cout lt;lt; endl; // returns from first function call cout lt;lt; " "; // enters second function call for(int i = 0; i lt; names.size(); i  ) {  cout lt;lt; names[i] lt;lt; endl; //might have to use endl for list format } cout lt;lt; endl;  

Это то, как компилятор будет его запускать, и именно поэтому ваши выходные данные находятся друг под другом.

Этот код-то, что вам нужно внутри перегрузки с двумя аргументами:

 for(int i = 0; i lt; ids.size(); i  )  {  cout lt;lt; ids[i] lt;lt; " " lt;lt; names[i] lt;lt; endl;  }  cout lt;lt; endl;  

Однако ваш результат все равно будет выглядеть не совсем так, как вы хотите. Для этого вам придется применить другие приемы.

Именно по этой причине ваш текущий код ведет себя так. Посмотрите на ответ М Хайдара, чтобы найти правильный способ решения вашей проблемы.