文件名; 输入->打开(fileName.c_str()); cin.clear(); 如果(输入->打开())中断; cout,c++,g++,ifstream,cin,C++,G++,Ifstream,Cin" /> 文件名; 输入->打开(fileName.c_str()); cin.clear(); 如果(输入->打开())中断; cout,c++,g++,ifstream,cin,C++,G++,Ifstream,Cin" />

此函数中的错误在哪里,它要求用户通过循环输入文件名? 以下函数在VisualC++中运行正常,但不在G++中。 void OpenFile(ifstream *input) { string fileName = ""; while (true) { cout << "Enter the filename: "; cin >> fileName; input->open(fileName.c_str()); cin.clear(); if (input->is_open()) break; cout << "The filename does not exist. Try again." << endl; } } void OpenFile(ifstream*输入) { 字符串fileName=“”; while(true){ cout>文件名; 输入->打开(fileName.c_str()); cin.clear(); 如果(输入->打开())中断; cout

此函数中的错误在哪里,它要求用户通过循环输入文件名? 以下函数在VisualC++中运行正常,但不在G++中。 void OpenFile(ifstream *input) { string fileName = ""; while (true) { cout << "Enter the filename: "; cin >> fileName; input->open(fileName.c_str()); cin.clear(); if (input->is_open()) break; cout << "The filename does not exist. Try again." << endl; } } void OpenFile(ifstream*输入) { 字符串fileName=“”; while(true){ cout>文件名; 输入->打开(fileName.c_str()); cin.clear(); 如果(输入->打开())中断; cout,c++,g++,ifstream,cin,C++,G++,Ifstream,Cin,cin.clear()应该做什么?它应该重置任何错误 状态,但希望输入不处于错误状态。 (否则,您将尝试打开没有名称的文件。)未定义的文件。) 关于程序的不同行为,我怀疑是这样的 链接到系统(或库)缓冲输入的方式 cin>>文件名通常在输入换行符之前不会返回; 但是,它不会从输入流中删除换行符。 这可能会导致输入阻塞,具体取决于输入的缓冲方式 (虽然我不认为应该)。尝试循环时 输入时,最好使用std::getline,然后提取 你需要的信息来自你读过的那一行 剥离两端的空白可能就足够了。)cin

cin.clear()应该做什么?它应该重置任何错误 状态,但希望输入不处于错误状态。 (否则,您将尝试打开没有名称的文件。)未定义的文件。)

关于程序的不同行为,我怀疑是这样的 链接到系统(或库)缓冲输入的方式
cin>>文件名
通常在输入换行符之前不会返回; 但是,它不会从输入流中删除换行符。 这可能会导致输入阻塞,具体取决于输入的缓冲方式 (虽然我不认为应该)。尝试循环时 输入时,最好使用
std::getline
,然后提取 你需要的信息来自你读过的那一行 剥离两端的空白可能就足够了。)

cin.clear()应该做什么?它应该重置任何错误 状态,但希望输入不处于错误状态。 (否则,您将尝试打开没有名称的文件。)未定义的文件。)

关于程序的不同行为,我怀疑是这样的 链接到系统(或库)缓冲输入的方式
cin>>文件名
通常在输入换行符之前不会返回; 但是,它不会从输入流中删除换行符。 这可能会导致输入阻塞,具体取决于输入的缓冲方式 (虽然我不认为应该)。尝试循环时 输入时,最好使用
std::getline
,然后提取 你需要的信息来自你读过的那一行
剥离两端的空白可能就足够了。)

可能是因为它是一个旧编译器。顺便问一下,您是否为错误的输入输入输入了空格?它是g++(GCC)3.4.4.不,我没有为错误的输入输入输入任何空格。您可以使用
ifstream
作为布尔值来检查一切是否正常,尽管它可能看起来很奇怪,因为它是一个指针(
if(*input)
)为什么不将其作为引用传递?在
打开
失败后,您不应该在
输入上调用
clear
?代码正常,请向我们展示如何调用OpenFile以及调用后的更多代码。问题可能出在代码的另一部分。可能是一个旧编译器。顺便问一下,您是否为wron输入了任何空格g输入?它是g++(GCC)3.4.4。不,我没有为错误的输入输入任何空格。您可以使用
ifstream
作为布尔值来检查一切是否正常,尽管它可能看起来很奇怪,因为它是一个指针(
if(*input)
)为什么不将其作为引用传递?在
打开
失败后,您不应该在
输入上调用
clear
?代码正常,请向我们展示如何在调用后调用OpenFile和更多代码。问题可能出在代码的另一部分。