Как мне установить маркер линии, с которого будет начинаться моя строка? setw() не достигает того, для чего мне это нужно

#c #new-operator

#c #новый оператор

Вопрос:

C Как мне установить маркер строки, с которого будет начинаться моя строка? setw() не достигает того, для чего мне это нужно. Мне нужно, чтобы строка начиналась в определенной точке и заканчивалась всякий раз, когда кажется, что setw() делает прямо противоположное. Я пришлю вам то, как должен выглядеть конечный результат. Игнорируйте специфику получения нужных чисел из входного файла, так как у меня уже все есть. Я просто не могу правильно отформатировать его на экране печати или в выходном файле.

Пример требуемого экрана печати/файла

У меня уже есть заголовки и фактическое содержимое, чтобы обеспечить правильные результаты. Опять же, я просто не могу сделать макет таким, каким он мне нужен. (P.S. Я использую цикл while для извлечения информации из файла. и BP был преобразован в int из строки)

Вот мой код до сих пор. Я не уверен, что происходит такое, что не позволяет мне привести его в соответствие с приведенным выше примером. Я перепробовал все комбинации setw() : левую, правую, внутреннюю и т. Д.

Возможно, это еще не в порядке, но я больше беспокоился о том, чтобы сначала убедиться, что у меня все есть, а затем беспокоиться о формате и порядке. (Мой поток сообщений находится в формате комментариев, пока я печатаю экран, чтобы проверить свой прогресс. В конечном итоге он будет использован. Я также уже знаю, что мой файл не закрывается в конце.)

 ifstream inputfile;    //ofstream outputfile;   string Patient1;  string Patient2;  string Patient3;  string fname;  string lname;  string bp;  int pos;  int systolic;  int diastolic;  string room;  string stage;  string risk;     inputfile.open("E:\Patient3E.dat");   //Headers for output   cout lt;lt; "Note" lt;lt; setw(5) lt;lt; "Room" lt;lt; setw(6) lt;lt; "Name" lt;lt; setw(23) lt;lt; "BP" lt;lt; setw(18) lt;lt; "Diagnosis" lt;lt; endl;  cout lt;lt; "----" lt;lt; setw(5) lt;lt; "----" lt;lt; setw(26) lt;lt; "------------------------" lt;lt; setw(10) lt;lt; "---------" lt;lt; setw(17) lt;lt; "---------------" lt;lt; endl;     while (inputfile gt;gt; fname gt;gt; lname gt;gt; bp gt;gt; room)    // Convert string to int for comparison with numbers   {bp.find("/");  pos = bp.find("/");  bp.substr(0, pos);  systolic = stoi(bp.substr(0, pos));  diastolic = stoi(bp.substr(pos 1));   //else if for determining risk asterisks count   if (((systolic gt;= 120) amp;amp; (systolic lt; 140)) || ((diastolic gt;= 80) amp;amp; (diastolic lt; 90)))   {risk = " *";  }  else if (((systolic gt;= 140) amp;amp; (systolic lt; 160)) || ((diastolic gt;= 90) amp;amp; (diastolic lt; 99)))  {risk = " **";  }  else if ((systolic gt;= 160) || (diastolic gt;= 100))  {risk = " ***";  }  else if ((systolic lt; 120) || (diastolic lt; 80))  {risk = " ";  }   cout lt;lt; left lt;lt; setw(4) lt;lt; risk lt;lt; right lt;lt; setw(5) lt;lt; room lt;lt; lname lt;lt; ", " lt;lt; fname;   //else if statements for adding   to systolic values equal to or greater than 120   if (systolic lt; 120)  {cout lt;lt; setw(11) lt;lt; systolic lt;lt; "/";  }  else if (systolic gt;= 120)  {cout lt;lt; setw(10) lt;lt; " " lt;lt; systolic lt;lt; "/";  }    //else if statements for adding   after diastolic for values equal to or greater than 80    if (diastolic lt; 80)  {cout lt;lt; setw (0) lt;lt; diastolic;  }  else if (diastolic gt;= 80)  {cout lt;lt; setw(0) lt;lt; diastolic lt;lt; " ";  }    //else if statements for determining stage   if (((systolic gt;= 120) amp;amp; (systolic lt; 140)) || ((diastolic gt;= 80) amp;amp; (diastolic lt; 90)))   {stage = "prehypertension";  }  else if (((systolic gt;= 140) amp;amp; (systolic lt; 160)) || ((diastolic gt;= 90) amp;amp; (diastolic lt; 99)))  {stage = "stage 1";  }  else if ((systolic gt;= 160) || (diastolic gt;= 100))  {stage = "stage 2";  }  else if ((systolic lt; 120) || (diastolic lt; 80))  {stage = "Normal";  }   cout lt;lt; stage lt;lt; endl;     }    cout lt;lt; "Summary" lt;lt; endl;  cout lt;lt; "Count" lt;lt; setw(13) lt;lt; "Diagnosis" lt;lt; endl;  cout lt;lt; "-----" lt;lt; setw(23) lt;lt; "-------------------" lt;lt; endl;   //pause funciton   Pause();   return(0); }  

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

1. Я надеюсь, что это не настоящие медицинские данные, но они выглядят совсем не фальшивыми.

2. Как мне установить маркер строки, с которого будет начинаться моя строка? — Это не очень описательное название. Во-вторых, мы понятия не имеем, какой код вы написали, так как вы его не публиковали. Наконец, вы можете просто использовать a std::string , изменить его размер и вставить данные в строку в любом нужном вам положении. Затем выведите строку целиком.

3. Они фальшивые, Ха-ха, извини, я должен был упомянуть, что это для класса

4. Я также добавил свой код в исходное сообщение, чтобы было легче понять, с чем у меня проблемы.

5. Очевидно, что это не весь код, который я написал, так как у меня уже есть весь шаблон, извлечение данных, сравнения для определения звездочек, знаков плюс и т. Д. Это как раз та часть, которая больше всего подчеркивает мою проблему, связанную с невозможностью привести имя в соответствие с началом буквы вместо «,».