【发布时间】:2017-06-17 19:04:19
【问题描述】:
对于上下文,我正在尝试用 C 编写解决 this problem 的代码。
问题比较简单。第一个输入是一个整数,表示分数流中的分数数量。以下输入都是代表分数的整数。程序应该读取分数流并返回两个值:最高分记录被打破的次数,以及最差记录被打破的次数。
我已经写下了这个解决方案。
#include <stdio.h>
int getRecord(int n, int s[], int *max_records, int *min_records)
{
int max_score, min_score;
max_score = min_score = s[0];
for (int i = 1; i < n; i++)
{
if (s[i] > max_score)
{
(*max_records)++;
max_score = s[i];
}
if (s[i] < min_score)
{
(*min_records)++;
min_score = s[i];
}
printf("%d %d\n", max_score, min_score); // inserted to see values
return 0;
}
}
int main(char args[])
{
int n;
scanf("%d", &n);
int s[n];
for (int i = 0; i < n; i++)
scanf("%d", &s[i]);
int max_records = 0;
int min_records = 0;
getRecord(n, s, &max_records, &min_records);
printf("%d %d\n", max_records, min_records);
}
由于某种原因,无论我使用什么输入,for 循环都只会在程序运行时迭代一次。
【问题讨论】:
-
main()函数只有两个有效签名:int main( void )和int main( int argc, char *argv[] )发布的代码有:int main( cgar args[]与任何有效签名都不匹配。所以编译器抱怨签名。然后编译器继续抱怨没有使用参数args -
函数:
getRecord()在始终执行的for()循环中间有一个return语句。并且在最后的}之前没有return value语句 -
在调用任何
scanf()系列函数时,始终检查返回值(而不是参数值)以确保操作成功 -
为什么 getRecords() 的返回类型不是
void,因为没有返回有用的信息,并且在main()中的调用忽略了返回值? -
当希望用户输入一些值时,总是提示用户,然后验证输入。 IE。永远不要相信用户会做正确的事情,尤其是(如在发布的代码中)用户只能看着一个空白屏幕,光标闪烁,并且没有指示他们应该做什么。