输入缓冲区错误或其他原因
Input Buffer error or something else?
我有这段代码,它工作正常,但我无法理解 for 循环中 cin.get(ch) 的含义。删除程序后,我对其进行了测试,第一个输入很好,但是一旦循环第二次运行,程序就不会等待用户输入"名称"并自动跳过"标记"。
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
#include<stdlib.h>
void main ()
{ clrscr();
int marks;
char name[40];
char ch;
ofstream a("STUDENT.txt",ios::app);
char ans='y';
while(ans=='y'|| ans=='Y')
{ cout<<"nEnter name of student: " ;
cin.getline(name,40);
cout<<"Enter marks of student: ";
cin>>marks;
cout<<"Want to enter more? (y/n)";
cin>>ans;
cin.get(ch);
a<<"n"<<name<<"n"<<marks;
}
a.close ();
getch();
}
cin >> ans
只从输入中读取一个字符。所以当用户键入 y Return 时,y
将被放入 ans
中,但输入缓冲区仍将包含换行符。当你回到cin.getline(name, 40)
时,这将看起来像一个空行。 cin.get(ch)
读取下一个字符,即额外的换行符。
更好的方法是使用cin.getline()
将"想要输入更多?"的答案读入字符串中,然后检查字符串的第一个字符是否y
。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++字符*缓冲区的大小
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
- GLSL 计算着色器 使用查找表设置缓冲区会导致不写入任何数据,与其他数据设置相同的缓冲区有效
- 缓冲区溢出到其他 exe 的内存中?还是从远程桌面程序到 csrss.exe?
- 当与可能导致缓冲区溢出的功能一起使用时,外部变量是否比其他变量更大
- 协议缓冲区、Apache Thrift或任何其他数据结构序列化协议中的递归数据结构
- 如果从其他线程访问(读/写)src缓冲区,是否有可能从memcpy获得访问冲突
- 通过统一缓冲区对象发送到 GLSL 的数据会泄漏到其他绘制调用中 (OpenGL 3.2)
- 输入缓冲区错误或其他原因
- 清除输入缓冲区中的所有其他字符
- 我想复制 (wchar_t *) 缓冲区中的数据,但我无法这样做 bcz 还有其他不兼容的类型,类型转换但没有得到结果
- OpenGL -正确分离VAO定义从VBO和其他缓冲区的创建