在C++中没有新行字符的字符串不打印
我正在打开一个文件,从中获取行。 第一行应该说明有多少个变量,以及它们的名称。 第二行应该是使用这些变量的逻辑方程。 任务是让它打印出变量和方程的真值表 程序接收的第一行没有插入新行字符就无法打印。我尝试转换为字符串并使用printf和cout 输入所有内容的主文件:在C++中没有新行字符的字符串不打印,c++,char,printf,ifstream,cout,C++,Char,Printf,Ifstream,Cout,我正在打开一个文件,从中获取行。 第一行应该说明有多少个变量,以及它们的名称。 第二行应该是使用这些变量的逻辑方程。 任务是让它打印出变量和方程的真值表 程序接收的第一行没有插入新行字符就无法打印。我尝试转换为字符串并使用printf和cout 输入所有内容的主文件: #include "truthTable2.h" int main(int argc, const char* argv[]){ ifstream inFile; if(argc != 2){ cout <
#include "truthTable2.h"
int main(int argc, const char* argv[]){
ifstream inFile;
if(argc != 2){
cout << "Enter an input file name: ";
char *inFileName = "";
cin >> inFileName;
inFile.open(inFileName);
}
else
inFile.open(argv[1]);
TruthTable tTable;
while(!inFile.eof()){
char variableLine[256];
inFile.getline(variableLine, 256);
printf("%s ", variableLine);
string variable(variableLine);
tTable.setVariables(variable);
char formulaLine[256];
inFile.getline(formulaLine, 256);
cout << formulaLine << "\n";
string formula(formulaLine);
tTable.setFormula(formula);
tTable.printTable();
}
inFile.close();
return 0;
}
这项研究的结果:
( \wedge x ( \not y ) )
我认为,无论是什么原因导致了这一点,在整个课程的其余部分,都会给我带来问题。在我标记variableLine之后,它不会在没有新行字符的情况下打印,并且在计算公式时也找不到第二个变量。需要刷新std::ostream的输出。写入换行符时,它通常会自动刷新。如果要强制流刷新,可以使用std::flush操纵器,如下所示:
std::cout << "foo" << std::flush;
由此,我有一个问题:你的输入是如何组织的?您的输入文件只有两行吗?这些线对有多组吗?有一行变量和一组方程吗?这三个案例将引导我以以下方式之一重新构建程序:
仅限2行:
多套:
多重方程式:
如果我看到的是正确的,printf的输出就是没有显示的输出。在这种情况下,使用
fflush(stdout);
<>或更好,只需使用STD::CUT,因为你用C++编写了:使用St::冲洗技术,当然。填充{尝试读心术。请重新阅读我的答案。@Chubsdad:是的。上次我检查Microsoft的实现时,它只是在流中插入了一个\n,并自动刷新它。这并没有解决问题。我获取输入文件的方法有什么问题吗?我觉得第一行的结尾有问题,即把其他的都弄糟了。很抱歉不够清晰,谢谢你的描述性回答。我想之前的问题是,在第一行中,垃圾被添加到了末尾,这使得它无法打印,并且在比较变量向量中的最后一个元素时给它带来了问题。我将程序更改为全部在一个文件中。错误编程实践,并通过使用infle>>tempString进行所有输入使其正常工作。感谢您的帮助。请注意,infle>>tempString一次只能读取一个令牌。要读取实体行,您应该使用GetLineinfle,tempString。是的,我知道这一点,我正在尝试保留细节,因为我现在已经解决了所有问题,但还没有解决想用不必要的细节来打扰你。
#include "truthTable2.h"
int main(int argc, const char* argv[]){
std::ifstream inFile;
if(argc != 2){
cout << "Enter an input file name: ";
std::string inFileName;
std::getline(std::cin, inFileName);
inFile.open(inFileName.c_str());
}
else {
inFile.open(argv[1]);
}
if ( !inFile.is_open() ) {
// Did not successfully open a file. Print error message and exit!
}
TruthTable tTable;
for (std::string variables; std::getline(inFile,variables); )
{
std::cout << variables << std::endl;
tTable.setVariables(variable);
std::string formula std::getline(formula);
std::cout << formula << std::endl;
tTable.setFormula(formula);
tTable.printTable();
}
return 0;
}
ThruthTable table;
std::string variables, equation;
std::getline(file, variables);
std::getline(file, equation);
// ...
while ( !inFile.eof() )
{
ThruthTable table;
std::string variables, equation;
std::getline(file, variables);
std::getline(file, equation);
// ...
}
ThruthTable table;
std::string variables;
std::getline(variables);
for ( std::string equation; std::getline(file, equation); )
{
std::getline(file, equation);
// ...
}
fflush(stdout);