2016-10-04 4 views
-2

Желание сделать какое-то причудливое форматирование. У меня есть несколько строк, которые я хочу взаимодействовать друг с другом. Получите первые две строки. Распечатайте символ во второй строке, умножая целое число в первой строке. Отделите их всех символом звездочки. Нет звездочки после печати окончательного символа. Переместитесь на следующее целое число и символ. Распечатайте их на отдельной строке. Сделайте это для всего списка. Проблема, которую я испытываю, заключается в том, чтобы печатать их на отдельных строках. Пример:Проблемы с getline C++

5 
! 
2 
? 
3 
# 

Желаемый выход:

!*!*!*!*! 
?*? 
#*#*# 

Мой выход:

!*!*!*!*!*?*?*#*#*#* 

Кусок кода. Я читаю данные о символах и числах из отдельного текстового файла. Поэтому я использую функцию getline.

Вот кусок кода:

ifstream File; 
File.open("NumbersAndCharacters.txt") 
string Number; 
string Character; 
while(!File.eof(){ 
    getline(File, Number); 
    getline(File, Character); 
//a few lines of stringstream action 
    for (int i=0; i<=Number; i++){ 
     cout<<Character<<"*";}//end for. I think this is where 
          //the problem is. 
    }//end while 
File.close(); 
return 0; 

Где ошибка? Это цикл? Или я не понимаю getline?

Должно быть напечатано «endl» или «\ n» после каждого умножения символа.

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

+0

где вы думаете, что ' "Endl" или "\ п"' приходит от? –

+0

Функция 'std :: getline' не помещает символы окончания строки во входную строку. –

+1

Также обратите внимание: [Почему iostream :: eof внутри условия цикла считается неправильным?] (Http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) –

ответ

0

Если характер чтения является последним из его линии, просто поставить «Endl» вместо «*», так как GetLine() не включает возвращение строки:

while(!File.eof(){ 
     getline(File, Number); 
     getline(File, Character); 
    //a few lines of stringstream action 
     for (int i=0; i<=Number; i++){ 
      cout<<Character; 
      if (i == Number) 
       cout<<endl; 
      else 
       cout<<"*"; 
     } 
    }//end while 
+0

Спасибо! Ты обалденный! –

0

getline обыкновение читать символ новой строки в конце строки в вашем файле. Вы также не добавляете новую строку в любом месте. Если вы сбиты с толку, символом новой строки является символ '\n' и представляет собой разрыв новой строки (в окнах обычно это «\ n \ r», возврат каретки новой строки).

Вы должны добавить свой собственный перевод строки:

for (int i=0; i<=Number; i++){ 
    cout<<Character; 
    if (i != Number) { 
     cout << '*'; 
    } 
} 
cout << "\n";