相当于c ++中的Console.ReadLine()

Ant*_*Lev 15 c++ string scanf readline

截图 我的老师刚刚用c ++给了我一个作业,我试图用scanf得到一个字符串,但它只能输入最后输入的字符.有人可以帮我吗?我在c ++中寻找相当于console.readline()的东西.

编辑:我还必须能够通过指针存储值.

所以图片显示当前在后台运行的代码,它应该停止在无保证maladie:并等待输入,但它跳过它.

getline(cin,ptrav-> nam); 有效,但由于某种原因它跳过一条线......

Dav*_*nan 30

你在找std::getline().例如:

#include <string>
std::string str;
std::getline(std::cin, str);
Run Code Online (Sandbox Code Playgroud)

当你说我还必须能够通过指针存储值时,我不知道你的意思.

更新:看看你更新的问题,我可以想象发生了什么.读取选项的代码,即数字1,2等不是读取换行符.然后你调用getline哪个消耗换行符.然后getline再次调用取出字符串.

  • 不知道.无法看到您的屏幕,代码或输入. (2认同)
  • 屏幕截图不允许我们运行您的代码.创建最小的程序来说明您的问题并发布它.我认为这将是一个新问题.我想你在这里提出的问题已得到解答. (2认同)

rub*_*ots 7

根据MSDN,Console :: ReadLine:

Reads the next line of characters from the standard input stream.
Run Code Online (Sandbox Code Playgroud)

C++ - Variant(不涉及指针):

#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;
}
Run Code Online (Sandbox Code Playgroud)


C-Variant(带缓冲区和指针)也适用于C++编译器,但不应使用:

 #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);
}
Run Code Online (Sandbox Code Playgroud)


根据你的代码示例,如果你有一个结构patient(在David hefferman的评论之后纠正):

struct patient {
   std::string nam, nom, prenom, adresse;
};
Run Code Online (Sandbox Code Playgroud)

然后,以下应该有效(ios::ignoreDavidHeffernan通过逻辑思考解决了其他问题之后添加).请不要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);
...
Run Code Online (Sandbox Code Playgroud)