我的老师给了我一个C++作业,我正在尝试使用scanf获取一个字符串,但它只能获取输入的最后几个字符。有人可以帮助我吗?我正在寻找在C++中与console.readline()等价的方法。
编辑:我还必须能够通过指针存储该值。
所以图片显示了当前正在后台运行的代码,它应该停在“没有保险医疗:”处等待输入,但跳过了它。
getline(cin, ptrav->nam);可以工作,但出于某种原因会跳过一行...
我的老师给了我一个C++作业,我正在尝试使用scanf获取一个字符串,但它只能获取输入的最后几个字符。有人可以帮助我吗?我正在寻找在C++中与console.readline()等价的方法。
编辑:我还必须能够通过指针存储该值。
所以图片显示了当前正在后台运行的代码,它应该停在“没有保险医疗:”处等待输入,但跳过了它。
getline(cin, ptrav->nam);可以工作,但出于某种原因会跳过一行...
你正在寻找std::getline()
。例如:
#include <string>
std::string str;
std::getline(std::cin, str);
当你说“我还必须能够通过指针存储该值”时,我有点不明白你的意思。
更新:看了一下你更新后的问题,我可以想象发生了什么。读取选择的代码,即数字1、2等,没有读取换行符。然后调用getline
消耗了换行符。然后再次调用getline
获取字符串。
getline(cin, ptrav->nam)
。这是因为字符串参数通过引用传递给getline
函数。 - David Heffernan#include "string"
must be added or else you might get identifier "getline" is undefined
- Junior MayhéReads the next line of characters from the standard input stream.
#include <iostream>
#include <string>
int main()
{
std::cout << "Enter string:" << flush;
std::string s;
std::getline(std::cin, s);
std::cout << "the string was: " << s << std::endl;
}
#include <stdio.h>
#define BUFLEN 256
int main()
{
char buffer[BUFLEN]; /* the string is stored through pointer to this buffer */
printf("Enter string:");
fflush(stdout);
fgets(buffer, BUFLEN, stdin); /* buffer is sent as a pointer to fgets */
printf( "the string was: %s", buffer);
}
patient
(在David hefferman的备注后进行了更正):struct patient {
std::string nam, nom, prenom, adresse;
};
接下来,以下内容应该有效(在解决了DavidHeffernan的问题之后,添加了ios::ignore
)。请绝不要在您的代码中完全不使用scanf
。
...
std::cin.ignore(256); // clear the input buffer
patient *ptrav = new patient;
std::cout << "No assurance maladie : " << std::flush;
std::getline(std::cin, ptrav->nam);
std::cout << "Nom : " << std::flush;
std::getline(std::cin, ptrav->nom);
std::cout << "Prenom : " << std::flush;
std::getline(std::cin, ptrav->prenom);
std::cout << "Adresse : " << std::flush;
std::getline(std::cin, ptrav->adresse);
...