如何 return 来自函数的 C 字符串并显示它
How to return a C-String from a function and display it
我的程序无法显示整个 C 字符串,它只显示第一个字母!我正在尝试编写一个要求用户输入 2 个 C 字符串的函数。然后我有一个单独的函数来确定哪个 c-sting 按字母顺序更大,另一个要显示。每次它显示 c 字符串时,它只显示第一个字母。我不知道我做错了什么。我需要它来显示整个 C 字符串。
这是向用户询问两个 C 字符串的函数:
const char *getData(char *c, char *d)
{
cout << "Enter the first c-string: ";
cin.ignore();
cin.getline(c, 50);
cout << "Enter the second c-string: ";
cin.getline(d, 50);
return c, d;
}
这是比较 c 字符串的函数
const char findBigger(char *c, char *d)
{
if (strcmp(c, d) == 0)
return *c;
else if (strcmp(c, d) < 0)
return *c;
else if (strcmp(c, d) > 0)
return *d;
}
这里是显示输入和更大的 c 字符串的函数
void displayBigger(const char *c, const char *d, const char *maxChar)
{
cout << "The first c-string is " << c << endl;
cout << "The second char is " << d << endl;
cout << "The bigger value is " << maxChar << endl;
cout << "__________________________________________" << endl;
}
在main()
我有
char first[50],
second[50]'
maxArray[50];
getData(first, second);
*maxArray = findBigger(first, second);
displayBigger(*first, *second, *maxArray);
程序的输出是:
Enter the first c-string: apple pie
Enter the second c-string: peach pie
The first char is a
The second char is p
The bigger value is a
__________________________________________
如何让它打印整个 C 字符串?它应该显示“苹果派”和“桃子派”
你的代码有几个问题,尽管没有使用 std::string
.
是显而易见的问题
问题 1:
const char findBigger(char *c, char *d)
{
if (strcmp(c, d) == 0)
return *c;
else if (strcmp(c, d) < 0)
return *c;
else if (strcmp(c, d) > 0)
return *d;
}
- 这个函数应该return
const char *
,而不是const char
。
- 您不必要地使用同一组参数调用
strcmp
3 次。您只需调用 strcmp
一次并测试该值:
固定代码可能如下所示:
const char* findBigger(const char *c, const char *d)
{
if ( strcmp(c, d) <= 0 )
return c;
return d;
}
请注意参数是 const char *
,因为您没有更改 C-strings.
中包含的数据
问题 2:
char first[50],
second[50]'
maxArray[50];
getData(first, second);
*maxArray = findBigger(first, second);
displayBigger(*first, *second, *maxArray);
调用函数(假设它是main
)将maxArray
声明为char
的数组,但应该声明为const char *
].
对 displayBigger
的调用应该有指针传递给它。
这里是固定版本:
int main()
{
char first[50],
second[50];
getData(first, second);
const char *maxArray = findBigger(first, second);
displayBigger(first, second, maxArray);
}
问题 3:
const char *getData(char *c, char *d)
{
cout << "Enter the first c-string: ";
cin.ignore();
cin.getline(c, 50);
cout << "Enter the second c-string: ";
cin.getline(d, 50);
return c, d;
}
getData
不需要 return const char *
,因为参数是指向 char
将被填充的缓冲区的指针。然后这一行:
return c, d;
没有 return 两个值,只有 d
由于逗号运算符。这成为一个有争议的问题,因为一旦函数声明为 void
.
就没有必要了
固定版本:
void getData(char *c, char *d)
{
cout << "Enter the first c-string: ";
cin.ignore();
cin.getline(c, 50);
cout << "Enter the second c-string: ";
cin.getline(d, 50);
}
我的程序无法显示整个 C 字符串,它只显示第一个字母!我正在尝试编写一个要求用户输入 2 个 C 字符串的函数。然后我有一个单独的函数来确定哪个 c-sting 按字母顺序更大,另一个要显示。每次它显示 c 字符串时,它只显示第一个字母。我不知道我做错了什么。我需要它来显示整个 C 字符串。
这是向用户询问两个 C 字符串的函数:
const char *getData(char *c, char *d)
{
cout << "Enter the first c-string: ";
cin.ignore();
cin.getline(c, 50);
cout << "Enter the second c-string: ";
cin.getline(d, 50);
return c, d;
}
这是比较 c 字符串的函数
const char findBigger(char *c, char *d)
{
if (strcmp(c, d) == 0)
return *c;
else if (strcmp(c, d) < 0)
return *c;
else if (strcmp(c, d) > 0)
return *d;
}
这里是显示输入和更大的 c 字符串的函数
void displayBigger(const char *c, const char *d, const char *maxChar)
{
cout << "The first c-string is " << c << endl;
cout << "The second char is " << d << endl;
cout << "The bigger value is " << maxChar << endl;
cout << "__________________________________________" << endl;
}
在main()
我有
char first[50],
second[50]'
maxArray[50];
getData(first, second);
*maxArray = findBigger(first, second);
displayBigger(*first, *second, *maxArray);
程序的输出是:
Enter the first c-string: apple pie
Enter the second c-string: peach pie
The first char is a
The second char is p
The bigger value is a
__________________________________________
如何让它打印整个 C 字符串?它应该显示“苹果派”和“桃子派”
你的代码有几个问题,尽管没有使用 std::string
.
问题 1:
const char findBigger(char *c, char *d)
{
if (strcmp(c, d) == 0)
return *c;
else if (strcmp(c, d) < 0)
return *c;
else if (strcmp(c, d) > 0)
return *d;
}
- 这个函数应该return
const char *
,而不是const char
。 - 您不必要地使用同一组参数调用
strcmp
3 次。您只需调用strcmp
一次并测试该值:
固定代码可能如下所示:
const char* findBigger(const char *c, const char *d)
{
if ( strcmp(c, d) <= 0 )
return c;
return d;
}
请注意参数是 const char *
,因为您没有更改 C-strings.
问题 2:
char first[50],
second[50]'
maxArray[50];
getData(first, second);
*maxArray = findBigger(first, second);
displayBigger(*first, *second, *maxArray);
调用函数(假设它是
main
)将maxArray
声明为char
的数组,但应该声明为const char *
].对
displayBigger
的调用应该有指针传递给它。
这里是固定版本:
int main()
{
char first[50],
second[50];
getData(first, second);
const char *maxArray = findBigger(first, second);
displayBigger(first, second, maxArray);
}
问题 3:
const char *getData(char *c, char *d)
{
cout << "Enter the first c-string: ";
cin.ignore();
cin.getline(c, 50);
cout << "Enter the second c-string: ";
cin.getline(d, 50);
return c, d;
}
getData
不需要 return const char *
,因为参数是指向 char
将被填充的缓冲区的指针。然后这一行:
return c, d;
没有 return 两个值,只有 d
由于逗号运算符。这成为一个有争议的问题,因为一旦函数声明为 void
.
固定版本:
void getData(char *c, char *d)
{
cout << "Enter the first c-string: ";
cin.ignore();
cin.getline(c, 50);
cout << "Enter the second c-string: ";
cin.getline(d, 50);
}