私はc++
に大学のクラスでブラッシングしていましたが、診断に問題がある奇妙な問題が発生しました。do-whileループでC++不要な一時停止が発生する
コードがコンパイルされ、望ましい結果でOK実行されますが、有効なエントリを取得した後、プログラムは
を継続プログラムは、それがその名前でファイルを作成するために使用する入力を受け取る前に[ENTER]
のためにハングアップするようです。
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
void createFile(string filename);//create userFile
void validateUserName(string &name);//validate user name
//main function
int main()
{
ifstream file;
string filename;
cout<< "Enter your name and press <ENTER>";
getline(cin, filename);
validateUserName(filename);
printf("validation passed\n");
createFile(filename);
}
void createFile(string filename)
{
ofstream file;
file.open(filename.c_str());
file.close();
}
void validateUserName(string &name){
int errCount = 0;
int i=0;
do
{
errCount = 0;
i=0;
while (name[i])
{
if (!isalpha(name[i]))
errCount++;
i++;
}
if (errCount > 0)
cout << "Invalid entry, try again" << endl;
getline(cin, name);
}
while (errCount > 0);
printf("validating\n");
}
[ENTER]
を待っているプログラムのハングアップを回避するにはどうすればよいですか?
エラーチェックif文のあちこちに括弧がありません。 – Rakete1111
'std :: cout'はデフォルトでバッファリングされます。何があなたをたたくのだろうか? Btw;なぜあなたは 'cout'と' printf'を混ぜていますか? –
ここに構造がありません。関数内の1つのトピックを保持してください。 validate関数はただ検証する必要があります。失敗した場合は、エラーを返します。呼び出し関数は、より多くの入力のためにループを回ります。検証関数の入力を増やすのは間違っています... –