输出输入的拼接版本

Outputting spliced version of input

本文关键字:版本 拼接 输入 输出      更新时间:2023-10-16
#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);
}

输入你的名字:My name is Sean

一旦我这样做,它输出"我的名字是Sean",但之后是一堆无意义的疯狂符号。

为什么在Sean中n之后没有停止?因为这里有一个' n'字符。至少我是这么认为的。

所有,我想要的是输出name中的每个字符一次一个符号,当它到达行尾时停止,这样当数组实际上小得多时它就不必转到256

我的代码有什么问题?

cin.getline从输入缓冲区中读取换行符(或您指定的任何分隔符),但不将其包含在生成的字符串中,因此您将读取超过已读取数据的末尾,直到遇到恰好包含对应于换行符的值的下一个字节(通常为10)。

直接写在一起就容易多了:cout << name;

From documentation:

字符被提取,直到已提取(n - 1)个字符或者找到分隔字符(如果此参数为指定,否则为'n')。的如果结束,提取也会停止文件在输入序列中被到达或者在输入过程中出现错误操作。

如果找到分隔符,则为提取并丢弃,即不储存和下次输入之后将开始操作。如果你我不希望这个角色是提取后,可以使用成员get相反。