#include <iostream>
#include <string>
using namespace std;
int main()
{
char name[256];
cout << "Enter your name: ";
cin.getline (name,256);
for(int i = 0; i < 50; i++)
{
cout << name[i];
if (name[i] == '\n')
break;
}
cout << endl;
return(0);
}
输入您的姓名:我的名字是Sean
一旦我这样做,它输出“我的名字是肖恩”,但之后是一堆无意义的疯狂符号。
为什么在肖恩'n'之后不停止?因为那里有'\ n'字符。或者至少我会想。
所有,我想要的是一次输出名称中一个符号的每个字符,当它到达行尾时停止,这样当数组实际上小得多时它不必转到256 / p>
我的代码出了什么问题?
答案 0 :(得分:3)
cin.getline
从输入缓冲区中读取换行符(或指定为delmiter的任何内容),但不将其包含在生成的字符串中,因此您正在读取数据的末尾。读取,直到遇到恰好包含与换行符对应的值的下一个字节(通常为10)。
将它们全部写在一起要容易得多:cout << name;
答案 1 :(得分:0)
来自文档:
提取字符直到 (n - 1)个字符已被提取 或找到分隔字符 (如果此参数为,则为delim 指定,否则为“\ n”。该 如果结束,提取也会停止 在输入序列中到达文件 或者如果在输入过程中发生错误 操作
如果找到分隔符,则为 提取和丢弃,即它是 没有存储和下一个输入 操作将在它之后开始。如果你 不要这个角色 提取后,你可以使用成员获取 代替。