我遇到这样的问题:
玩家通常坐成一圈。指定首先进入的玩家说出数字“1”,然后每个玩家轮流计算一个数字。但是,任何可被'A'整除的数字,例如三个被fizz替换,任何可被'B'整除,例如五个字嗡嗡声。被两者整除的数字成为嘶嘶声。犹豫不决或犯错的玩家要么被淘汰。
编写一个程序,打印出由这样一个场景生成的模式,给出从输入文本文件中读取的'A'/'B'和'N'的值。输入文本文件包含三个空格分隔的数字,即A,B,N。程序应打印出最后一系列数字,使用'F'表示fizz,'B'表示'buzz'和'FB'表示fizz buzz。 / p>
输入如下:
您的程序应该读取包含多个换行符分隔行的输入文件(在命令行中提供)。每行包含3个以空格分隔的数字。第一个数字是除以的第一个数字(在这个例子中是'A'),第二个数字是除以的第二个数字(在这个例子中是'B'),第三个数字是你应该数到的数字('N')在这个例子中)。您可以假设输入文件格式正确,并且数字是有效的正整数。例如。
3 5 10
2 7 15
输出:
打印出系列1到N,用F替换为'A'的数字,用B除以'B'的数字和用'FB'整除的数字。由于输入文件包含多组值,因此输出将打印出每行一行。确保您打印的每一行都没有尾随空格。 E.g。
1 2 F 4 B F 7 8 F B
1 F 3 F 5 F B F 9 F 11 F 13 FB 15
约束: 测试用例的数量<= 20 “A”在范围[1,20] “B”在范围[1,20] “N”在[21,100]范围内
现在我写了以下代码:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a,b,n,i;
int part;
/* char file[200]; */
/* scanf("%s",file); */
FILE *f = fopen(argv[1],"r");
while(fscanf(f,"%d %d %d",&a,&b,&n) == 3)
{
for ( i = 1 ; i <= n ; i++ )
{
if ( i % a == 0 && i % b == 0 )
{
printf("FB ");
continue;
}
if ( i % a == 0 )
{
printf("F ");
}
else if( i % b == 0 )
{
printf("B ");
}
else
{
printf("%d ",i);
}
}
printf("\n");
}
//printf("%d",all);
return 0;
}
当我在计算机上运行上述程序时,它运行良好。但是在在线编译和运行的情况下,它会给出分段错误。即使是在线编译器选择的文件也没有在我的计算机上给出任何错误。 在线编译器的文件在这里:
6 14 50
15 12 53
14 2 37
15 11 67
3 8 100
12 14 30
7 12 64
19 9 97
20 11 76
16 10 76
13 13 53
1 7 65
10 13 86
3 1 60
4 17 99
8 10 51
10 12 65
10 19 70
8 17 100
16 9 52
我的代码出了什么问题?
答案 0 :(得分:3)
问题在于:
FILE *f = fopen(argv[1],"r");
while(fscanf(f,"%d %d %d",&a,&b,&n) == 3)
如果没有提供命令行参数,argv[1]
为NULL,访问它会导致程序崩溃。
此外,如果给出了不存在文件的名称,fopen()
将返回NULL。之后fscanf()
也会崩溃。
您应该添加argc > 1
和f != NULL
。
除此之外,显然,在网上编译时,论据没有正确给出 - 我不知道如何解决这个问题。