2015-09-21 7 views
0

Я совершенно новый для переполнения стека, поэтому спасибо всем вам за терпение, помогая мне в решении моей проблемы. Я пишу программу на C++, которая реализует сортировку вставки, сортируя числа из .txt-файла. Он принимает файл, показывает содержимое и затем запрашивает у пользователя, хотят ли они сортировать номера. Когда я нажимаю «y», он должен инициировать алгоритм сортировки в моем коде. Однако сейчас все, что он делает, - это компиляция. Любые советы высоко ценится.Вставка Инициирование сортировки

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

//Read file input and display contents 
ifstream& readfile(ifstream& file) 
{ 
    string line; 
    if (getline(file, line)) 
    { 
     cout << line; 
    } 
    return file; 
} 

int main() 
{ 
    string fileName, line, r; 
    int n, i, j, k, temp; 
    int a[n]; 
    ifstream fs; 

    cout << "enter file: "; 
    cin >> fileName; 

    ifstream file(fileName); 
    if (file.is_open()) 
    { 
     while (readfile(file)) 
     { 
     } 
    } 
    cout << endl << endl << "Sort File? y or n? "; 
    cin >> r; 
    if (r == "y") 
    { 
     for (i = 0; i < n; i++) 
     { 
      cin >> a[i]; 
     } 
     for (i = 1; i < n; i++) 
     { 
      for (j = i; j >= 1; j--) 
      { 
       if (a[j] < a[j - 1]) 
       { 
        temp = a[j]; 
        a[j] = a[j - 1]; 
        a[j - 1] = temp; 
       } 
       else 
       { 
        break; 
       } 
      } 
     } 
     for (k = 0; k < n; k++) 
     { 
      cout << a[k] << endl; 
     } 
    } 
    else 
    { 
     cout << endl << "error" << endl; 
    } 

    cin.get(); 
    return 0; 
} 
+0

Вы должны установить 'n' должным образом перед' int a [n]; ' – MikeCAT

+1

@MikeCAT VLA arent standard C++ в любом случае. –

+1

'Когда я нажимаю« y », он должен инициировать алгоритм сортировки в моем коде. Однако сейчас все, что он делает, - это компиляция. Любые советы очень ценятся. «Я не уверен, что ваша проблема ясна. когда вы компилируете свою программу (отличная от запуска результирующей программы), вы получаете какие-либо ошибки или действительно ли «завершаете компиляцию»? Когда вы запускаете свою программу после ее компиляции, что происходит? Есть ли ошибки? Разве это просто заканчивается, ничего не делая? – Steve

ответ

0

n не инициализируется.

for (i=0;i<n;i++) 
{ 
    cin >> a[i]; 
} 

Здесь ничего не происходит, потому что (если вам повезло ...) n = 0. Инициализируйте n до 5, если хотите только 5 записей.

или

  • использование STL контейнеры, такие как станд :: вектор, например, вы используете C как язык здесь ...
  • Изменения граничного условия в цикле, когда пользователь инициализирует вставку

Например, если пользователь вставить «стоп» слова:

std::vector<int> vIntegers; 
std::string input; 
int n = 0; 

while (input != "stop") 
{ 
    std::cin >> input; 
    // test if integer here 
    { 
     vIntegers.push_back(n); 
    } 
} 

здесь пост в test, если строка является целым числом How do I check if a C++ string is an int?

+0

На самом деле я не хочу, чтобы n исправлялся. Я предпочел бы, чтобы n был динамическим на основе ввода пользователем. Возможно ли это? –

+0

@A. Боргер Да, все возможно. См. Издание – Foebius

Смежные вопросы