【问题标题】:I couldn't give string as input from my input file(input.txt) to c++ program in vscode我无法将输入文件(input.txt)中的字符串作为输入提供给 vscode 中的 c++ 程序
【发布时间】:2021-09-25 13:24:22
【问题描述】:

我是竞争性编程的新手,最近才开始接触它。我开始学习 C++ 以进行竞争性编程。从我阅读的所有资源中,我了解到我们需要准备一些后端功能,以便我们在比赛中快速。所以,我已经准备好了所有这些,并且我已经在某个地方读到了我们可以从文件中获取输入并将输出写入文件而不是使用终端来提供输入的地方。这是我使用 freopen() 完成的,但遇到了问题。

问题是我无法从文件中读取字符串输入 (input.txt) 或写入 C++ 中的输出文件 (output.txt)。但是整数、字符、浮点数的读取,一切都很好,但只有字符串输入有问题。我什至可以使用字符数组输入字符串,效果很好。但有时使用字符数组对程序来说并不是更好。所以,如果有人可以帮助我,我将不胜感激。还有一件事是,当我们尝试接受字符串输入时,程序会执行但什么也没有发生。

这是我的代码以及输入和输出 **ps:**input指执行时input.txt中的数据,output指执行后output.txt中的数据

我的 PC 中的 C++ 版本 - C++14(Mingw 编译器)

```this first code is where problem exists```
#include<iostream>
int main(int argc, char const *argv[])
{
  #ifndef ONLINE_JUDGE
  freopen("input.txt","r",stdin); 
  freopen("output.txt","w",stdout);
  #endif
  string a;
  cin>>a;  
// here I even tried getline(cin,a) but it also doesn't work as program executes 
// but nothing will be written to output 
  cout<<a<<"\n";
  return 0;
}

input - abcdef
output- (BLANK)

----------

#include<iostream>
int main(int argc, char const *argv[])
{
  #ifndef ONLINE_JUDGE
  freopen("input.txt","r",stdin); 
  freopen("output.txt","w",stdout);
  #endif
  int a;
  cin>>a;
  cout<<a;
  return 0;
}

input - 9
output- 9

----------

#include<iostream>
int main(int argc, char const *argv[])
{
  #ifndef ONLINE_JUDGE
  freopen("input.txt","r",stdin); 
  freopen("output.txt","w",stdout);
  #endif
  char a[100];
  cin>>a;
  cout<<a<<"\n";
  return 0;
}

input - abcdefg
output - abcdefg

----------

int main(int argc, char const *argv[])
{
  #ifndef ONLINE_JUDGE
  freopen("input.txt","r",stdin); 
  freopen("output.txt","w",stdout);
  #endif
  string a="abcdef";
  cout<<a<<"\n";
  return 0;
}
input - (BLANK)
output - (BLANK)

【问题讨论】:

  • 我很困惑,您声称使用freopen() 是为了运行得更快,但您的代码仅在不被判断时明确使用它。为什么要打扰?
  • 我已经在 MSYS2 中包含的 MinGW 下编译了第一个代码:g++.exe(Rev9,由 MSYS2 项目构建)10.2.0 我无法重现您遇到的问题。我在 output.txt 文件中看到“abcdef”输出。
  • 我一直想知道freopen shuffle。为什么不编写使用泛型 istream 的函数并根据需要传递给这些函数 cin 或 ifstream 而不必费力?
  • 建议:使用开发环境附带的任何调试工具逐步完成程序,并确保 cin&gt;&gt;a; 确实阅读了您想要的内容。
  • 另一个建议:你不想在比赛期间这样做,因为它会减慢速度,但是当你试图弄清楚为什么事情不工作时,最好的起点是通过始终检查返回码。 freopen 中的任何一个都可能失败。你没看。 cin&gt;&gt;a; 可能失败了。你没看。 cout&lt;&lt;a; 可能失败了。你没看。结果,您对程序中真正发生的事情几乎一无所知,一切都会出人意料。在生产代码中,如果你可以测试失败而你没有,那你就是个傻瓜。

标签: c++ string c++14


【解决方案1】:

起初,我想告诉大家我不太确定我的答案,我是 Stackoverflow 的新手,没有足够的声誉,这就是我无法编写 cmets 的原因。回答这个问题是我可以就这个问题分享我的观点或研究的唯一方式。所以,请把我当作一个新手,给我你的建议,这样我就可以提高自己。谢谢?。

让我们来谈谈我的看法:

  1. 我看到您在代码中使用了 cin 和 cout 而不在它们前面添加 (std::) 并且您也没有使用“使用命名空间 std”。所以我的问题是如何运行你的程序而不会出错。

  2. 我只是复制您的代码并尝试在我的计算机上运行。而且我发现您的代码在每种情况下都能完美运行,天气我输入 int 或 string。它工作得很好。但我找到了一个不起作用的原因,也许这就是你面临的问题。那是当您编辑 output.txt 文件并且没有保存该文件时。然后你在你的 output.txt 文件中什么也得不到,你将 int 或 string 作为输入。因此,请确保您保存了所有三个文件,然后运行主程序。

这就是我的全部。请告诉我,我的回答是否有用??

【讨论】:

  • 嗨@Alamin_Mir,很抱歉我忘了写“使用命名空间标准”这一行。并感谢您尝试回答问题,我已经尝试过这样做,但我仍然无法从文件中读取字符串,或者我可以编写输出文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
相关资源
最近更新 更多