Проблема в том, что мне нужен ввод строки, чтобы принять пустую строку

#c 11

#c 11

Вопрос:

Предполагается, что программа получит строку, которая может содержать пустые строки, пробелы и строки разрыва. Итак, проблема в том, что я не могу использовать get line, потому что я не знаю, сколько строк разрыва будет использовать пользователь. Я попытался выполнить do while, но это не сработало, программа перестает работать. Это было время выполнения, которое получало char и использовало pushback insert в строке, в то время как char отличался от EOF. Я не знаю, как еще это сделать, или почему это do while не работает. Этот код использует get line, который не принимает строку разрыва.

 '''''
#ifndef INDICE_H
#define INDICE_H
#include <cstddef>

struct Indice{
    std::size_t f;
    double p;
};

#endif
#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
#include <map>
#include "Indice.hpp"

int main()
{
    std::string str;
    std::getline(std::cin, str);

    // Count the number of occurrences for each word
    std::string word;
    std::istringstream iss(str);
    std::map<std::string,Indice> occurrences;
    while (iss >> word)   occurrences[word].f;

    //Calculate the percentual each word
    int total = 0.0;
    for (std::map<std::string,Indice>::iterator it = occurrences.begin(); 
         it != occurrences.end();   it)
    {
        total  = it->second.f;
    }

    for (std::map<std::string,Indice>::iterator it = occurrences.begin(); 
         it != occurrences.end();   it)
    {
        it->second.p = (static_cast<double>(it->second.f))/total;
    }
    // Print the results
    for (std::map<std::string,Indice>::iterator it = occurrences.begin(); 
         it != occurrences.end();   it)
    {
        if(it->first.size()>2)
            std::cout << it->first << " " << it->second.f  << " "<< std::fixed << std::setprecision(2) << it->second.p << std::endl;
    }

    return 0;
}
''''
  

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

1. Это тот, который я использую, проблема в том, что он останавливается на строке разрыва ( n)

Ответ №1:

Два возможных решения:

 #include <iostream>
#include <string>
int main(){
    std::string line;
    while(std::cin >> line){
        //Variable line contains your input.
    }
    //Rest of your code
    return 0;
}
  

Или:

 #include <iostream>
#include <string>
int main(){
    std::string line;
    while(std::getline(std::cin, line)){
        if (line.empty()){
            break;
        }
        //Variable line contains your input.
    }
    //Rest of your code
    return 0;
}