Как изменить функцию, чтобы она передавалась по ссылке для моей переменной y из данных, которые она получает из входного файла?

0

Наш проект состоит в том, чтобы взять двоичные числа из входного файла и затем преобразовать их в десятичный эквивалент. Я создал входной файл в jGrasp, так как это компилятор, который я использую. Если пробел перед номером, вы игнорируете его и продолжаете, пока не будет числа. Если между номерами имеется пробел, оно выводит сообщение об ошибке. Я работал над ним несколько, но в моих функциях я использовал cin.ignore, и теперь, когда я изменил его на fcin.ignore, он дал мне сообщение об ошибке. Мой учитель сказал, чтобы изменить мою функцию, чтобы пройти по ссылке, и это исправит ее, но я не уверен, как я это сделаю. Какие-либо предложения?

//input file
   111101\n
1101\n
11  001\n
111000000000000011101010101010101010100\n


//Program
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

int main( ){
   // vairables
   char ch;
   int decimal = 0;

   //function prototypes
   void decimalValue (char , int&);



   //declaring filestream
   string fileName;
   ifstream fcin;

   //asking user for file name
   cout << "What is the file called: "<< endl;
   cin >> fileName;

   fcin.open(fileName.c_str());
   fcin.get(ch);
   while (!fcin.eof()){ 

      //fcin.get(ch);
      decimalValue(ch,decimal);
      fcin.get(ch);
    }  // end while
    cout << decimal << endl; 
   fcin.close();

return 0;
}

//functions
void decimalValue( char x, int& y ){
   void improperInput(char , int&);
   if (x == '1'){
      y = ((y *2)+1);
      }
   else if (x == '0'){
      y = (y *2);
      }
   else if (x == '\n'){
      cout << y << endl;
      y = 0;
   }
   else if (x == '2')
      improperInput(x,y);
   else if (x == '3')
      improperInput(x,y);
   else if (x == '4')
      improperInput(x,y);
   else if (x == '5')
      improperInput(x,y);
   else if (x == '6')
      improperInput(x,y);      
   else if (x == '7')
      improperInput(x,y);   
   else if (x == '8')
      improperInput(x,y);
   else if (x == '9')
      improperInput(x,y);
   else if ((y == 0) && (x == ' '))
      fcin.ignore();
   else if ((y != 0) && (x == ' '))
      improperInput(x,y);
}

void improperInput(char x, int& y ){
      fcin.ignore(50,'\n');
      cout << "*Improper Input*" << endl;
      y = 0;

}
Теги:
file-io

1 ответ

0

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

Передача по ссылке - это то, что вы уже делаете с int& y. Вам также нужно будет понять, что пройти по ссылке.

Что вы подразумеваете под словом "он выводит сообщение об ошибке"? Что такое сообщение об ошибке? Что это'? Это важные вещи, которые можно сказать кому-то, когда они обращаются за помощью.

Если это сообщение об ошибке компилятора, вы должны попытаться прочитать и понять, что это значит. Например, я ожидаю увидеть ошибки, подобные

error: 'fcin' was not declared in this scope.

Пожалуйста, сделайте соответствующее исследование того, что означает "scope" и как оно применяется к переменным в программе c++.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню