Проблема в последнем else. Нужно что бы не выдавало ошибку, изначально делал “Prov” типом “char”, как выяснилось, нужно что бы он был типом “int”

137
09 декабря 2020, 00:20

Программа должна получить цифры в текстовый файл, и вывести те числа, которые являются числами Фибоначчи. Перед последним, как раз проблемным ифом, стоят два цикла. Может показаться что они лишние, но один отвечает за перечень самих чисел из файла, второй же, отвечает за сравнение с каждым числом фибоначчи, (в данном случаи до тридцатого) Опять же, проблема в условии цикла "while(fin.get(Prov))", когда Prov был типа char ошибок не было, но работал не правильно, символ цифры не может ровняться цифре, по логике VS. Сейчас тип Prov, заменен на int. !!!!!!!! Вот эта формула описанная в комментарии.

#include <iostream>

using namespace std;

int Fib(int i)

{

int value = 0;

if(i < 1) return 0;

if(i == 1) return 1;

return Fib(i-1) + Fib(i - 2);

}

int main()

{

int i = 0;

while(i < 47)

{

cout << Fib(i) << endl;

i++;

}

return 0;

}

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


#include "pch.h"
#include "windows.h"
#include "string.h"
#include <iostream>
#include "fstream"
#include "locale.h"
using namespace std;
int main()
{
    setlocale(0, "");
    string chis = "MyProgFile.txt";
    ofstream fout;
    fout.open(chis, ofstream::app);
    if (!fout.is_open())
    {
        cout << "ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR";
    }
    else
    {
        int i,j, chislo,Rozmer;
    cout << "Укажите количество чисел - ";
    cin >> Rozmer;
    cout << "Заполните текстовый файл"<<endl;
    for (i = 0;i < Rozmer;i++)
    {
        cin >> chislo;
        fout << chislo<<endl;
    }
    }
ifstream fin;
fin.open(chis);
int x0 = 0, x1 = 1,j=0;
if(!fin.is_open())
{
    cout << "ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR";
}
else
{
    cout << "Файл открыт"<<endl;
    int Prov;
    int MF[] = { 0,1 };
        while(fin.get(Prov))
        {
            while (j>30)
            {
                if (Prov == (MF[x0] + MF[x1]))
                {
                    x0++;
                    x1++;
                    cout << Prov;
                }
                else
                    cout << "ERROR ERROR ERROR";
            }
        }
}
fin.close();
return 0;
}
Answer 1

Если вы намереваетесь получать число именно из одной цифры - то таки пусть Prov будет char, а после чтения - добавьте

Prov -= '0';

Но если это должно быть многозначное число, то лучше работать как

int Prov;
while (fin >> Prov)...
READ ALSO
Как убрать прыгания при наведении на блок?

Как убрать прыгания при наведении на блок?

Верстаю тренировочный макет(на названия классов и id забил)Не могу решить проблему, когда при наведении все скачет, в том числе и фон

139
Увеличение под размер монитора translate

Увеличение под размер монитора translate

Есть строка которая уменьшает весь обьект

98