在做一些简单的练习时,我现在对iostream和指针有很大的疑问。
这是我制作的两个略有不同的文件(它们都能工作):
文件1接收到"我的名字是#Marco"的输入,并打印出"Mynameis">
int main(){
using namespace std;
char* ch=new char[256];
int count=0;
cout <<"Enter chars, # to quit:n";
cin >> ch;
while(*ch!='#'){
cout << ch;
++count;
cin >> ch;
}
cout << endl << count << " characters readn";
return 0;
}
文件2接收到与以前相同的输入,但这次cout也打印了空格:
int main(){
using namespace std;
char* ch=new char[256];
int count=0;
cout <<"Enter chars, # to quit:n";
cin.get(*ch);
while(*ch!='#'){
cout << *ch;
++count;
cin.get(*ch);
}
cout << endl << count << " characters readn";
return 0;
}
我不明白的是,为什么在第二个文件的第8行,我必须写"cout<<*ch",而不是像第一个文件那样写"cout<<ch"。事实上,如果我在文件2中使用"cout<<ch",我得到的只是一堆随机符号(我想字符取自指针的地址)
在第一种情况下,您正在将C样式字符串读取到数组中。这意味着cin
一次读取一个字符串,并将该字符序列存储在ch
中,然后是终止的空字符