我想比较使用Python和C++从stdin读取字符串的读取行,并且看到我的C++代码运行速度比等效的Python代码慢一个数量级,这让我很震惊.由于我的C++生锈了,我还不是专家Pythonista,请告诉我,如果我做错了什么或者我是否误解了什么.
(TLDR回答:包括声明:cin.sync_with_stdio(false)或者只是fgets改用.
TLDR结果:一直向下滚动到我的问题的底部并查看表格.)
C++代码:
#include <iostream>
#include <time.h>
using namespace std;
int main() {
string input_line;
long line_count = 0;
time_t start = time(NULL);
int sec;
int lps;
while (cin) {
getline(cin, input_line);
if (!cin.eof())
line_count++;
};
sec = (int) time(NULL) - start;
cerr << "Read " << line_count << " lines in " << sec << " seconds.";
if (sec > 0) {
lps = line_count / sec;
cerr << " LPS: " << lps …Run Code Online (Sandbox Code Playgroud) 在以下代码中:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
string x = "This is C++.";
ofstream of("d:/tester.txt");
of << x;
of.close();
ifstream read("d:/tester.txt");
read >> x;
cout << x << endl ;
}
Run Code Online (Sandbox Code Playgroud)
Output :This
由于>> operator读取到第一个空格,我得到了这个输出.如何将线提取回字符串?
我知道这种形式,istream& getline (char* s, streamsize n ); 但我想将它存储在一个字符串变量中.
我怎样才能做到这一点 ?
我一直在为我的CIS类做一个小练习,并且我对C用于从文件中读取的方法感到困惑.我真正需要做的就是逐行读取文件并使用从每行收集的信息进行一些操作.我尝试使用getline方法和其他没有运气的方法.我的代码目前如下:
int main(char *argc, char* argv[]){
const char *filename = argv[0];
FILE *file = fopen(filename, "r");
char *line = NULL;
while(!feof(file)){
sscanf(line, filename, "%s");
printf("%s\n", line);
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
现在我用sscanf方法得到一个seg错误,我不知道为什么.我是一名C总裁,只是想知道是否有一些我失踪的大事.谢谢
我用C++编写了一个非常基本的程序,它要求用户输入一个数字,然后输入一个字符串.令我惊讶的是,在运行程序时,它永远不会停止询问字符串.它只是跳过了它.在对StackOverflow进行一些阅读后,我发现我需要添加一行说:
cin.ignore(256, '\n');
Run Code Online (Sandbox Code Playgroud)
在获取字符串输入的行之前.添加修复问题并使程序正常工作.我的问题是为什么C++需要这一cin.ignore()行,我如何预测何时需要使用cin.ignore()?
这是我写的程序:
#include <iostream>
#include <string>
using namespace std;
int main()
{
double num;
string mystr;
cout << "Please enter a number: " << "\n";
cin >> num;
cout << "Your number is: " << num << "\n";
cin.ignore(256, '\n'); // Why do I need this line?
cout << "Please enter your name: \n";
getline (cin, mystr);
cout << "So your name is " << mystr << "?\n";
cout << "Have a nice …Run Code Online (Sandbox Code Playgroud) 我使用getline方法获取用户输入的消息时遇到问题,我使用的方法如下:
string messageVar;
cout << "Type your message: ";
getline(cin, messageVar);
Run Code Online (Sandbox Code Playgroud)
然而,它并没有停止获得输出值,这有什么问题?
早些时候我发布了一个关于cin跳过输入的问题,我得到了刷新和使用的结果istringstream,但现在我尝试了所有可能的解决方案,但它们都没有工作.
这是我的代码:
void createNewCustomer () {
string name, address;
cout << "Creating a new customer..." << endl;
cout << "Enter the customer's name: "; getline(cin, name);
cout << "Enter the customer's address: "; getline(cin, address);
Customer c(name, address, 0);
CustomerDB::addCustomer(c);
cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的东西,跳过输入,当它确实需要输入时,它需要它们并且名称中的存储空白,并且在地址中它采用我在名称中写的但是从第二个字母到结尾
我的代码出了什么问题?
我尝试了cin.ignore(),cin.get()和cin.clear()所有的人一起,独自一人,没有一次成功
编辑:
main.cpp中的main方法mainMenu()只调用
void mainMenu () {
char choice;
do {
system("cls");
mainMenuDisplay();
cin >> choice;
system("cls");
switch (choice) {
case '1': …Run Code Online (Sandbox Code Playgroud) 如何使用该std::getline功能检查文件结尾?如果我使用eof()它,eof在我尝试读取超出文件结尾之前不会发出信号.
我需要以下程序来获取整行用户输入并将其放入字符串名称:
cout << "Enter the number: ";
int number;
cin >> number;
cout << "Enter names: ";
string names;
getline(cin, names);
Run Code Online (Sandbox Code Playgroud)
然而,使用cin >> number命令之前的getline()命令(我猜这是问题),它不允许我输入名称.为什么?
我听说过一个关于cin.clear()命令的事情,但我不知道这是如何工作的,或者为什么这甚至是必要的.
什么时候应该std::cin.getline()使用?它有什么不同std::cin?
我有一个循环,使用以下方法读取文件中的每一行getline():
istream is;
string line;
while (!getline(is, line).eof())
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我注意到这样调用getline()似乎也有效:
while (getline(is, line))
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?getline()返回流引用.是以某种方式转换为指针?这实际上是一种很好的做法还是我应该坚持第一种形式?