如何解决调用函数后,我的char数组的大小自动缩小为1
#include <iostream>
#include <iomanip>
using namespace std;
void getinput(char &first,char &second);
//char getinput(char &first,char &second);
int main()
{
char a[60],b[60];
getinput(a[60],b[60]);
cout << a[60] << " l " << b[60] <<endl;
}
void getinput (char &first,char &second){
cout << "Enter First Input: ";
cin >> first;
cout << "Enter Second Input: ";
cin >> second;
cout << "You Entered " << first << " and " << second <<endl;
}
每次我尝试使char数组的大小变大时,当我调用get输入函数s0时,我可以输入更多字符,然后一个字符自动缩小为一个字符。
解决方法
我的char数组的大小在调用a之后自动缩小为1 功能
它是char
类型的对象的大小。
函数的参数已引用类型为char
的对象。
void getinput(char &first,char &second);
那不是一维数组的引用类型。
所以这个电话
getinput(a[60],b[60]);
在索引等于60
的地方传递对两个数组不存在的标量元素的函数引用。
声明函数的简单方法如下
void getinput( char *first,char *second );
该函数可以像
那样调用getinput( a,b );
如果要为参数指定引用类型,则可以像这样声明函数
void getinput(char ( &first )[60],char ( &second )[60] );
并称呼为
getinput( a,b );
请注意,在函数声明的两种情况下,这都是不安全的,因为没有这样的检入语句
cin >> first;
用户是否在数组之外写。
您可以应用成员函数getline
来代替使用运算符>>。
例如
std::cin.getline( first,60 );
,
cout << a[60] << " l " << b[60] <<endl;
此行不会将数组写入std::cout
,而只会将单个元素写入std::cout
,即第61个元素(实际上位于数组之外)。
相反,您应该这样做:
std::cout << a << " l " << b << '\n';
还要注意,您的getinput(char&,char&)
函数将仅从流中读取两个字符,而不是两个数组。我建议改为使用std::string
来实现整个过程:
#include <iostream>
#include <string>
int main()
{
std::string a,b;
std::cin >> a >> b;
std::cout << a << " l " << b << '\n';
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。