将板球队N名击球手的得分作为输入传递给程序。程序必须打印得分最高的击球手的名字。
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int run[n],maxIndex=0;
char name[n][100];
for(int i=0;i<n;i++)
scanf("%[^,],%d",name[i],&run[i]);
for(int i=0;i<n;i++){
if(run[i]>run[maxIndex])
maxIndex=i;
}
printf("%s",name[maxIndex]);
return 0;
}
Input:
5
BatsmanA,45
BatsmanB,42
BatsmanC,12
BatsmanD,9
BatsmanE,78
Output:
BatsmanE
问题是我在打印语句之前首先得到一个换行符。如,
Output:
BatsmanE
问题是我在打印语句之前首先得到一个换行符。
这是因为%[^,]
首先读取前一行剩余的'n'
。
scanf("%d",&n);
读取"5"
并将5存储到n
中。'n'
保留在stdin
.
scanf("%[^,],%d",name[i],&run[i]);
读取"nBatsmanA,45"
并将"nBatsmanA"
存储到name[0]
中,然后读取","
,再读取"45"
并将45存储到run[0]
中。
要读取一行用户输入,请研究fgets()
。
首先,如果您想使用scanf读取字符串,您应该确保您不能获得超过字符串可以处理的字符。为此,您可以使用宽度子说明符:
scanf("%99[^,],%d", name[i], &run[i]);
关于字符串开头的'n'
,那是因为"%[^,]"
保持它从以前的scanf
,只是添加*将读取和丢弃的东西:
scanf("%*[n]%99[^,],%d", name[i], &run[i]);
但是正如你所看到的,格式字符串现在变得不那么可读了…最好的方法是使用"%99s"
并依赖空格而不是','
:
scanf("%99s%d", name[i], &run[i]);
现在您只需在输入中用空格分隔值并得到相同的结果:
Input:
5
BatsmanA 45
BatsmanB 42
BatsmanC 12
BatsmanD 9
BatsmanE 78
但是在这种情况下,我个人更倾向于将格式分成两个"scanfs">:
scanf("%99s", name[i]);
scanf("%d", &run[i]);
同样,你会得到相同的结果