我想创建一个程序,提示用户输入班级中的学生数量,然后循环读取多个名称。一旦读完所有的名字,它就会报告哪个学生将在该行的前面,哪个学生将在该行的末尾。你可以假设没有两个学生有相同的名字。
但我的输出程序中没有显示正确的字符串比较...
以下是我的输出。 ...请帮帮我。
Enter the number of students(1 - 25): 5
Enter the name: ali
Enter the name: hamxa
Enter the name: hassan
Enter the name: anjum
Enter the name: java
╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠java ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠java
Press any key to continue . . .
以下是我的代码
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
const int size = 10;
char name[size], largest[size], smallest[size];
double num;
do
{
cout << "Enter the number of students(1 - 25): ";
cin >> num;
} while (num < 1 || num > 25);
cin.ignore();
for (int i = 0; i < num; i++)
{
cout << "Enter the name: ";
cin.getline(name, size);
if (strcmp(name, largest) > 0)
{
largest[size] = name[size];
}
if (strcmp(name, smallest) < 0)
{
smallest[size] = name[size];
}
}
cout << largest << " " << smallest << endl;
return 0;
}
答案 0 :(得分:0)
首先,您需要将largest[size] = name[size];
更改为strcpy(largest, name);
largest[size] = name[size]
没有意义,因为largest[i]
等于第(i + 1)个符号,在您的情况下size = 10
,largest
长度为10长largest[size]
{1}}指向不存在的第11个符号。
strcpy
将一个字符串复制到另一个字符串。
其次,您必须为smallest
和largest
设置默认值。因为默认情况下char[]
等于某些垃圾,例如╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
。
char largest[size] = "";
char smallest[size] = "zzzzzzzzz";
所以你的代码应该类似于这个
const int size = 10;
char name[size];
char largest[size] = "";
char smallest[size] = "zzzzzzzzz";
double num;
do
{
cout << "Enter the number of students(1 - 25): ";
cin >> num;
} while (num < 1 || num > 25);
cin.ignore();
for (int i = 0; i < num; i++)
{
cout << "Enter the name: ";
cin.getline(name, size);
if (strcmp(name, largest) > 0)
{
strcpy(largest, name);
}
if (strcmp(name, smallest) < 0)
{
strcpy (smallest, name);
}
}
cout << largest << " " << smallest << endl;
答案 1 :(得分:0)
对于初学者来说,将变量num
声明为double
类型是没有意义的。
double num;
我认为名字的数量不能只是一小部分。
最好将其声明为至少具有size_t
size_t num;
字符数组largest
和smallest
最初未初始化。所以if语句中的这些条件也没有意义
if (strcmp(name, largest) > 0)
//...
if (strcmp(name, smallest) < 0)
你应该用“空”字符串初始化数组,或者在main for循环中复制它们。
数组没有复制赋值运算符。您必须将一个数组的元素复制到另一个数组中。对于包含字符串的字符数组,您可以使用标准C函数strcpy
。
这些陈述
largest[size] = name[size];
smallest[size] = name[size];
尝试将一个数组中不存在的元素分配给另一个数组。它们不会将字符串从一个数组复制到另一个数组中。
程序可以通过以下方式查找
#include <iostream>
#include <cstring>
int main()
{
const size_t SIZE = 10;
char name[SIZE], largest[SIZE], smallest[SIZE];
size_t num;
do
{
std::cout << "Enter the number of students(1 - 25): ";
std::cin >> num;
} while (num < 1 || num > 25);
std::cin.ignore();
for ( size_t i = 0; i < num; i++ )
{
std::cout << "Enter the name: ";
std::cin.getline( name, SIZE );
if ( i == 0 )
{
std::strcpy( largest, name );
std::strcpy( smallest, name );
}
else if ( std::strcmp( largest, name ) < 0 )
{
std::strcpy( largest, name );
}
else if ( std::strcmp( name, smallest ) < 0 )
{
std::strcpy( smallest, name );
}
}
std::cout << largest << " " << smallest << std::endl;
return 0;
}
它的输出可能看起来像
Enter the number of students(1 - 25): 5
Enter the name: ali
Enter the name: hamxa
Enter the name: hassan
Enter the name: anjum
Enter the name: java
java ali