代码如下所示
#include <stdio.h>
#include <cstring>
int main()
{
double score[10] = { 0 };
char name[10][11] = { {0} };
int i = 0, j = 0, h = 0;
while (1)
{
printf("\n欢迎使用大学评价系统,请根据提示输入相应的信息\n");
printf("\n1.开启评价系统 2.对已输入的评分进行排名(从小到大)\n");
scanf_s("%d", &h);
if (h == 1)
{
printf("\n请输入该大学的名称(最多10个字符):");
int len = 0;
while (1)
{
char c = getchar();
if (c == '\n')
{
break; // 输入结束
}
if (c < ' ' || c > '~')
{
while (getchar() != '\n');
continue; // 非法字符,清空输入缓冲区
}
if (len < 10)
{
name[i][len++] = c;
}
}
name[i][len] = '\0'; // 填充空格
printf("\n请输入该大学的校友会排名:");
int a;
scanf_s("%d", &a);
double s1 = (a <= 300) ? 0.5 : 0.25;
printf("\n请输入该大学的软科排名:");
int b;
scanf_s("%d", &b);
double s2 = (b <= 300) ? 0.5 : 0.25;
printf("\n请输入该大学的US世界排名,如无请输0:");
int c;
scanf_s("%d", &c);
double s3 = (c == 0) ? 0.0 : (c >= 0 && c <= 1600) ? 1.0 : 0.5;
printf("\n请输入该大学是否坐落于省会城市:");
printf("\n1.是 2.否");
int d;
scanf_s("%d", &d);
double s4 = (d == 1) ? 2.0 : 1.0;
printf("\n请输入该大学的考研率,以小数形式输入:");
float e;
scanf_s("%f", &e);
double s5 = (e <= 0.1) ? 0.5 : 1.0;
printf("\n请输入该大学是一本还是二本:");
printf("\n1.一本 2.二本");
int f;
scanf_s("%d", &f);
double s6 = (f == 1) ? 5.0 : 3.0;
double s7 = s1 + s2 + s3 + s4 + s5 + s6;
printf("\n该大学的综合评分是%f", s7);
score[i] = s7;
i++;
printf("\n1.回到主菜单 2.继续录入新大学的数据");
scanf_s("%d", &h);
if (h == 1)
{
continue;
}
}
else if (h == 2)
{
for (i = 0; i < 9; i++)
{
for (j = 9; j > i; j--)
{
if (score[i] > score[j])
{
double tmp = score[i];
score[i] = score[j];
score[j] = tmp;
char name_tmp[11];
strcpy_s(name_tmp, 11, name[i]);
strcpy_s(name[i], 11, name[j]);
strcpy_s(name[j], 11, name_tmp);
}
}
}
printf("\n排名结果(从小到大):\n");
for (i = 0; i < 10; i++)
{
printf("%s %f\n", name[i], score[i]);
}
printf("\n1.回到主菜单 2.继续录入新大学的数据");
scanf_s("%d", &h);
if (h == 1)
{
continue;
}
}
}
return 0;
}
根据您提供的代码,可以看到其中使用了scanf_s函数,该函数需要三个参数:第一个参数为要读取的输入格式字符串,第二个参数为要读取的变量,第三个参数为该变量的大小。但是,在您的代码中,第三个参数在scanf_s函数中被省略了。
因此,您需要在scanf_s函数中添加第三个参数,即要读取的变量的大小,例如:
scanf_s("%d", &h, sizeof(h));
此外,您的代码中使用了strcpy_s函数进行字符串拷贝操作,但是该函数也需要指定要拷贝的字符串的大小,因此您需要在strcpy_s函数中添加第三个参数,这样可以避免内存溢出等问题。
另外,您的程序中使用了一些可能会导致死循环或者数组越界的代码,比如在输入大学名称时没有增加对数组下标的限制,这可能会导致数组越界的问题。建议您在写代码时要注意这些细节问题。
【由 http://www.gpt100.chat/ 生成,人工整理】
不知道你这个问题是否已经解决, 如果还没有解决的话:答案:
根据您提供的问题描述和代码,我认为问题可能出在输入大学名称时遇到空格的情况下。
在C++中,cin
默认以空格作为输入分隔符,所以如果您输入的大学名称中包含空格,cin
会将空格之前的部分作为输入,而忽略之后的部分。
为了解决这个问题,您可以使用getline
函数来获取整行输入,而不仅仅是使用cin
来获取单个字符串。
下面是修改后的代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
string university;
cout << "请输入大学名称:";
getline(cin, university);
cout << "您输入的大学是:" << university << endl;
return 0;
}
在这个修改后的代码中,我添加了<string>
头文件来使用string
类型,并使用getline(cin, university)
来获取整行输入。
这样修改后,您就可以输入包含空格的大学名称,并正确地输出了。
希望这个解决方案对您有帮助!如果有任何其他问题,请随时提问。