2015-03-20 1 views
1

В течение последнего дня у меня были некоторые проблемы с этим кодом. Здесь я хочу загрузить с помощью .txt несколько шестнадцатеричных значений, и если сумма первых пяти чисел равна последнему номеру, код правильный. Затем основной метод должен проверить, были ли методы останова. Но я не знаю, как это сделать, так что мне нужна ваша помощь ...Массив с шестнадцатеричными значениями в C++

#include <iostream> 
#include <fstream> 

#define FILECODE "file.txt" 
#define N_CODE 6 

using namespace std; 

ifstream file; 

void uploadCode(bool& exist, unsigned int longCode, unsigned int code[]); 
bool IsValidCode(unsigned int code[]); 

void main() { 
    unsigned int code[N_CODE]; 
    bool exist; 
    unsigned int longCode=N_CODE; 
    IsValidCode(code); 
    if(IsValidCode(code)==true){ 
     uploadCode(exist,longCode,code); //here I have the problem because I don't know how to call the method 
     cout << "SUCCESS" << endl; 
    } 
    else 
     cout << "FAIL" << endl; 

} 

void uploadCode(bool& exist, unsigned int longCode, unsigned int code[]) { 
    int i; 
    file.open(FILECODE); 
    if(file){ 
     exist=true; 
     for(int i=0;i<longCode;i++){ 
      file >> hex >> code[i]; 
      cout << "Number " << i << ": "<< code[i] << endl; 
     } 

     cout << "EXIST" << endl; 
    } 
    else 
     cout << "NO EXIST" << endl; 
     exist=false; 
    file.close(); 

} 

bool IsValidCode(unsigned int code[]) { 
    int i; 
    int sum=0; 
    for(int i=0; i<N_CODE-1; i++) 
     sum+=code[i]; 
     cout << "Sum first five numbers: " << sum << endl; 
    if(sum==code[6]) 
     return true; 
    else 
     return false; 
    return sum; 
} 
+3

Это хороший пример именования, почему бы не использовать макросы без необходимости. 'FILE' используется в стандартной библиотеке. – chris

+0

В 'IsValidCode()' 'return sum;' никогда не будет выполняться. – NathanOliver

+1

@chris * Это хороший пример именования, почему бы не использовать макросы без необходимости * Мне пришлось читать это 3 раза, прежде чем я понял, что вы имели в виду – Borgleader

ответ

0

В вашей main функции, вы звоните IsValidCode дважды, прежде чем данные считываются из файла. Я не думаю, что это то, что вы хотите.

Предпочтительный метод:

  • Read первые 6 чисел.
  • Сумма первых 5 номеров.
  • Если сумма! = 6-е число, введите код ошибки с main().

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

Edit 1: Пример

int main(void) 
{ 
    const unsigned int CODE_LENGTH = 6; 
    ifstream input_file("file.txt"); 
    if (!input_file) 
    { 
    cerr << "Error opening file.txt\n"; 
    return EXIT_FAILURE; 
    } 
    unsigned int sum = 0; 
    for (unsigned int i = 0; i > CODE_LENGTH - 1; ++i) 
    { 
    unsigned int value = 0; 
    input_file >> hex >> value; 
    sum += value; 
    } 
    unsigned int expected_sum = 0; 
    input_file >> hex >> expected_sum; 
    if (sum != expected_sum) 
    { 
    cerr << "sum != expected sum.\n"; 
    return EXIT_FAILURE; 
    } 
    // .... 
    return EXIT_SUCCESS; 
} 

Простой, не массивы необходимо, никаких дополнительных функции.

0

Вот минимально модифицированная версия, которая делает то, что вы хотите. Разумеется, гораздо лучше проверять возвращаемые значения вашей обработки ввода (т. Е. - file >> hex >> code[i];), чтобы увидеть, действительно ли эти входы на самом деле преуспевают или нет.

bool uploadCode(unsigned int longCode, unsigned int code[]) 
{ 
    bool ret; 

    file.open(FILECODE); // TODO: no need for a global here; just use a locally constructed ifstream 

    if (file.good()) 
    { 
     ret = true; 

     for(int i = 0; i < longCode; ++i) 
     { 
      file >> hex >> code[i]; 
      cout << "Number " << i << ": "<< code[i] << endl; 
     } 

     cout << "EXIST" << endl; 
    } 
    else 
    { 
     ret = false; 
     cout << "NO EXIST" << endl; 
    } 

    file.close(); 

    return ret; 
} 

int main() 
{ 
    unsigned int code[N_CODE]; 

    if (!uploadCode(N_CODE, code)) 
    { 
     cout << "File failure!" << endl; 
     return 1; 
    } 

    if (!IsValidCode(code)) 
    { 
     cout << "Code failure!" << endl; 
     return 2; 
    } 

    cout << "SUCCESS" << endl; 

    return 0; 
} 
Смежные вопросы