调用函数后,我的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';
}