如何cin空间在c + +?

假设我们有一个代码:

int main() { char a[10]; for(int i = 0; i < 10; i++) { cin>>a[i]; if(a[i] == ' ') cout<<"It is a space!!!"<<endl; } return 0; } 

如何在标准input中input空格符号? 如果你写空间,程序忽略! :(是否有任何符号组合(例如'\ s'或类似的东西),这意味着我可以从标准input使用我的代码“空间”?

它默认跳过所有的空格(空格,制表符,新行等)。 您可以更改其行为,也可以使用稍微不同的机制。 要改变它的行为,使用操纵器noskipws ,如下所示:

  cin >> noskipws >> a[i]; 

但是,既然你看起来像要看个人angular色,我build议在循环之前使用get

  cin.get( a, n ); 

注意: get将停止从stream中检索字符,如果它find一个换行符( \n )或n-1个字符之后。 它提前停止,以便它可以将空字符( \0 )附加到数组。 你可以在这里阅读更多关于istream接口。

 #include <iostream> #include <string> int main() { std::string a; std::getline(std::cin,a); for(std::string::size_type i = 0; i < a.size(); ++i) { if(a[i] == ' ') std::cout<<"It is a space!!!"<<std::endl; } return 0; } 

使用cin.get()来读取下一个字符。

但是,对于这个问题,一次读一个字符是非常低效的。 使用istream::read()来代替。

 int main() { char a[10]; cin.read(a, sizeof(a)); for(int i = 0; i < 10; i++) { if(a[i] == ' ') cout<<"It is a space!!!"<<<endl; } return 0; } 

并使用==来检查相等,而不是=

要input包含很多空格的整个行,可以使用getline(cin,string_variable);

例如:

 string input; getline(cin, input); 

这种格式捕捉句子中的所有空格,直到按下

使用cin的>>操作符会删除前导空格,并在第一个尾随空格处停止input。 要抓取整行input(包括空格),请尝试cin.getline() 。 要一次抓取一个字符,可以使用cin.get()

我以为我会分享为我工作的答案。 上一行以换行符结束,所以大多数这些答案本身都不起作用。 这样做:

 string title; do { getline(cin, title); } while (title.length() < 2); 

这是假设input总是至less2个字符长,这符合我的情况。 您也可以尝试简单地将它与string"\n"进行比较。

尝试这四种方式来input空间:)

 #include<iostream> #include<stdio.h> using namespace std; void dinput(char *a) { for(int i=0;; i++) { cin >> noskipws >> a[i]; if(a[i]=='\n') { a[i]='\0'; break; } } } void input(char *a) { //cout<<"\nInput string: "; for(int i=0;; i++) { *(a+i*sizeof(char))=getchar(); if(*(a+i*sizeof(char))=='\n') { *(a+i*sizeof(char))='\0'; break; } } } int main() { char a[20]; cout<<"\n1st method\n"; input(a); cout<<a; cout<<"\n2nd method\n"; cin.get(a,10); cout<<a; cout<<"\n3rd method\n"; cin.sync(); cin.getline(a,sizeof(a)); cout<<a; cout<<"\n4th method\n"; dinput(a); cout<<a; return 0; } 

我有同样的问题,我只是用cin.getline(input,300);

noskipwscin.get()有时不易使用。 既然你有正确的数组大小尝试使用cin.getline()不关心任何字符,并阅读指定字符数的整个行。