在print语句前获取换行符- c



将板球队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]);

同样,你会得到相同的结果

相关内容

  • 没有找到相关文章

最新更新