Вывод целого числа на консоль, которую я прочитал из файла, вставляет программу в бесконечный цикл? - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь написать консольное приложение, которое читает из файла в форме (все являются целыми числами)

Пример:

c

k

a1  a2  a3

a4  a5  a6

a7  a8  a9

где первая строка для количества строк, а втораядля количества столбцов и c , k и , все являются целыми числами.

если I cout<<row или столбец, это ставит программу в цикл.

Я попытался прочитать всю строку с

getline(my file, line)

, а затем

row=stoi(line);

но без без .

ПРИМЕР КОДА

void read_row_and_column_function(int* fucntion_selector,string* ptr_to_name_of_file)
{
    int row, column;
    ifstream myfile;
    myfile.open(*ptr_to_name_of_file);
    if(myfile.is_open())
    {
         myfile>>row;
         myfile>>column;
         myfile.close();
    }
    cout<<row;
}

Ожидаемый результат - строка.

РЕДАКТИРОВАНИЕ ПОЛНОГО КОДА

#include<iostream>
#include<fstream>
using namespace std;

void file_name_getter();

void read_ploynomials_and_variables_function(int* fucntion_selector,string* ptr_to_name_of_file)
{
    int polynomials, variables;
    ifstream myfile;
    myfile.open(*ptr_to_name_of_file);
    if(myfile.is_open())
    {
        myfile>>polynomials;
        myfile>>variables;
        myfile.close();
    }
    cout<<polynomials<<endl;
}

void data_structure_seletor(string* ptr_to_name_of_file)
{
    cout<<"Select the desired data structure to store polynomials\n1. Matrix\n2. Linked List\n3. Change file name\n0. EXIT\nINPUT: ";
    int data_structure_choice;
    cin>>data_structure_choice;
    while(1)
    {
        if (data_structure_choice==1)
        {
            read_ploynomials_and_variables_function(&data_structure_choice, ptr_to_name_of_file);
        }
        else if (data_structure_choice==2)
        {
        read_ploynomials_and_variables_function(&data_structure_choice, ptr_to_name_of_file);
        }
        else if (data_structure_choice==3)
        {
            cout<<"\n";
            file_name_getter();
        }
        else if (data_structure_choice==0)
        {
            return;
        }
        else
        {
            cout<<"\nIncorrect option. TRY AGAIN!!\n\n";
        }
    }
}

void file_name_getter()
{
    string name_of_file, extension=".txt";
    cout<<"Enter name of the file you want to open\nNOTE: \".txt\" extension will be appended by the program\nNAME of file: ";
    cin>>name_of_file;
    name_of_file=name_of_file+extension;
    data_structure_seletor(&name_of_file);
}

int main()
{
    file_name_getter();
    return 0;
}

Файлы находятся в одном файлепапки. Пример имени файла 10x5 , 3x3 и т. Д.

EDIT

__. Запрос решен. Проблема была в void data_structure_selector() в while(1) цикле.

1 Ответ

1 голос
/ 31 октября 2019

Вы читаете data_structure_choice только один раз вне цикла. И не изменяйте его значение внутри цикла. Вы имели в виду, чтобы прочитать ввод внутри цикла?

Вы можете использовать деталь также как условие цикла для цикла, пока не будет достигнуто значение eof или не будет введено значение, которое не может быть проанализировано как int:

    int data_structure_choice;

    while(cin>>data_structure_choice) {
        ...
    }

Также оставайтесь впомните, что такие функции, как getline(myFile, line) или myfile >> row будут не завершать вашу программу, если файл полностью прочитан или что-то в этом роде.

...