c - 在线编译时出现段错误

标签 c segmentation-fault runtime-error

我有这样的问题:

玩家通常坐成一圈。指定先走的玩家说出数字“1”,此后每位玩家轮流数一个数。但是,任何可被“A”整除的数字,例如three 被 fizz 和任何可被 'B' 整除的单词替换,例如五个字的嗡嗡声。可被两者整除的数字成为嘶嘶声。犹豫或犯错的玩家要么被淘汰。

编写一个程序,在给定从输入文本文件读取的“A”/“B”和“N”的值的情况下,打印出这种场景生成的模式。输入的文本文件包含三个空格分隔的数字,即 A、B、N。然后程序应打印出最终的数字系列,使用“F”表示 fizz,“B”表示“buzz”,“FB”表示 fizz buzz。

输入是这样的:

您的程序应该读取一个包含多个换行符分隔行的输入文件(在命令行上提供)。每行将包含 3 个以空格分隔的数字。第一个数字是第一个要除以的数字(本例中为“A”),第二个数字是第二个要除以的数字(本例中为“B”),第三个数字是你应该数到的地方('N'在这个例子中)。您可以假设输入文件的格式正确并且数字是有效的正整数。例如。

3 5 10

2 7 15

输出:

打印系列 1 到 N,将可被“A”整除的数字替换为 F,可被“B”整除的数字替换为“FB”。由于输入文件包含多组值,因此您的输出将每组打印一行。确保打印的每一行中没有尾随空格。例如

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;
}

当我在我的计算机上运行上述程序时,它运行良好。但是在线编译运行时,报segmentation fault。即使是在线编译器选择的文件在我的电脑上也没有给出任何错误。 在线编译器的文件在这里:

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

我的代码有什么问题?

最佳答案

问题出在这里:

FILE *f = fopen(argv[1],"r");
while(fscanf(f,"%d %d %d",&a,&b,&n) == 3)

如果没有提供命令行参数,argv[1] 为 NULL,访问它会使程序崩溃。

此外,如果给出的文件名不存在,fopen() 将返回 NULL。稍后将其提供给 fscanf() 也会崩溃。

您应该为 argc > 1f != NULL 添加检查。

除此之外,很明显,在线编译时,参数没有正确给出——我不知道你如何解决这个问题。

关于c - 在线编译时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23585790/

相关文章:

c - 释放 pthread_create 中指定的函数中的参数

c# - Swagger.net 是否可以与高于 4.0 的 .Net 框架配合使用

C 内存分配错误

c++ - AVL 树插入 - 段错误

ios - Swift:应用程序因未捕获的异常 'NSUnknownKeyException' 而终止

Cpp 检查显示缓冲区 'tmpf' 在其旧内容被使用之前被写入

c - 读取阻塞甚至关闭写入结束

c - 有序二叉树中的查找方法

MySql 版本 5.7.12 崩溃了

c++ - 使用析构函数时 Qt 程序中的奇怪行为