在C++中没有新行字符的字符串不打印

在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 <

我正在打开一个文件,从中获取行。 第一行应该说明有多少个变量,以及它们的名称。 第二行应该是使用这些变量的逻辑方程。 任务是让它打印出变量和方程的真值表

程序接收的第一行没有插入新行字符就无法打印。我尝试转换为字符串并使用printf和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);