2015-04-13 4 views
0

У меня есть две функции: add_account и is_account_exists. Я пытаюсь создать код, чтобы создать файл, если он уже не существует.создать файл пользовательского ввода

Но проблема принимает ввод имени файла, как показано в коде как проблема 1

Вот мой код, что я пытался

void add_account() 
{ 

    std::string name,account; 
    cout<<"Enter name of account : "; 
    std::getline(std::cin,name); 

    cout<<endl<<name<<endl; //Problem 1 , here 'name' is not displaying 
    string ext=".txt"; 
    account=name.append(ext); 
    cout<<account;    

    if(is_account_exists(account)==0){ 
     ofstream outfile(account.c_str()); 
     cout<<"Account created!"; 
    } 
    else{ 
     cout<<"Account already exists!"; 
    } 
} 


bool is_account_exists(const string& name) { 
    ifstream f(name.c_str()); 
    if (f.good()) { 
     f.close(); 
     return true; 
    } else { 
     f.close(); 
     return false; 
    } 
} 
+0

Я не понимаю вашу логику определения, существует ли учетная запись. В любом случае нет необходимости явно закрывать файл. –

+0

@JohnOdom вы всегда должны предпочесть 'getline' над' cin'. также 'is_account_exists' должно быть' does_account_exist' – deW1

ответ

0

Я попытался ввода программу, с некоторыми незначительными, которые вовлечь меня положить его в основной() и мой код таким образом:

#include <iostream> 
#include <string> 

using std::string; 
using std::cout; 
using std::endl; 
using std::getline; 
using std::cin; 

int main() 
{ 
    string name, account; 
    cout << "Enter the name of the account: "; 
    getline(cin, name); 
    cout << endl << "Name is set to " << name << endl; 
    string ext = ".txt"; 
    account = name.append(ext); 
    cout << "Account is set to: " << account << endl; 
    return 0; 
} 

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

Мне было интересно, если у вас есть какие-либо ошибки или вы забыли включить или что-то еще? Была ли программа запрашивать ввод при вызове функции?

Так, например, в вашем основном() есть ли у вас вызов add_account()?

Извините, что задал другой вопрос в ответе, но на первый взгляд я не вижу ничего плохого в вашем коде.

Редактировать

Просто еще раз взглянуть на ваш код, и ваш соиЬ не имеет зЬй :: перед ним так же, как вы раньше строки и CIN, убедитесь, что тоже. Извините, я пропустил этот ...

+1

Это не помогает, если имя файла имеет пробелы. Пример «идеальный файл filename.txt» –

+0

Хороший вопрос, немного изменил ответ – Welshboy

0

Моя догадка name отображается, но не содержит то, что вы ожидаете. После очень простого теста я убедился, что нет причин для того, чтобы вы не смогли ввести код пользователя в name (Dispate несоответствий с использованием std::cin, std::string и cout и endl --without std :: -).

Это испытание:

std::string name; 
std::getline(std::cin, name); 
std::cout << name << std::endl; 

и отлично работает.

Так несколько вещей, чтобы проверить:

  1. После того, как программа запрашивает имя файла, убедитесь, что вы попали Enter только один раз.
  2. Попробуйте отладить код и посмотреть, что действительно содержит name.
Смежные вопросы