【问题标题】:C-Program crashes/ stops working after second scanf()C-Program 在第二次 scanf() 后崩溃/停止工作
【发布时间】:2019-10-27 10:30:28
【问题描述】:

我写了以下代码:

#include <stdio.h>

int main (void){

    int a;
    int b;

    /* scan first number*/
    printf("number 1: ");
    scanf("%d", &a);

    /* scan second number*/
    printf("number 2: ");
    scanf("%d", &b);

    int c = a + b;

    printf("%d + %d = %d",a,b,c);

    return 0;
}

它编译成功,我可以运行程序,但是在第二个“scanf”之后它在“printf("%d * %d = %d",a,b,c);”出现之前就崩溃了。 我使用 Visual Studio Code 和 gc 编译器 (gcc)。

【问题讨论】:

  • 用什么输入会崩溃?另外int c = a + b; 太早了,因为此时ab 都没有被初始化。
  • int c = a + b; 这个指令会导致undefined behaiour。您正在使用变量 ab 在它们被初始化之前。 在您实际读取变量之后移动此语句。
  • 你应该在接收到它们的值后添加a和b。
  • 查看scanf的返回值:if (scanf("%d", &amp;b) != 1) { fprintf(stderr, "bad input for scanf\n"): exit(EXIT_FAILURE); }

标签: c crash printf scanf


【解决方案1】:
 int c = a + b;

你需要把这条线移到后面

/* scan first number*/
printf("number 1: ");
scanf("%d", &a);

/* scan second number*/
printf("number 2: ");
scanf("%d", &b);
*insert it here*

您正在尝试添加未声明的变量。程序崩溃是因为当您尝试将 c 变量打印为 int 计算机时无法在内存中找到它。 C 没有价值,或者你可以这样做:

int main (void){

int a;
int b;


/* scan first number*/
printf("number 1: ");
scanf("%d", &a);

/* scan second number*/
printf("number 2: ");
scanf("%d", &b);

printf("%d + %d = %d",a,b,a+b);

return 0;

}

【讨论】:

  • 感谢您的快速回复。我尝试了提到的两个机会,但它仍然崩溃。
  • 你能告诉我你的主文件的扩展名,是main.c还是main。 cpp VSC 默认使用 cpp,这意味着你应该用 C++ 编写。如果你想在 C 中运行项目,你需要创建 main.c
  • 我的文件名以 .c 结尾。当我运行我的程序时,我必须启动一个由 Visual Studio 创建的 .exe。不幸的是,隐含的终端不起作用。问题可能与此有关吗?
  • 我认为你的程序没有崩溃。如果您使用 f5(调试模式)键运行它,则代码中没有断点,它只是通过程序并以如此快的时间结束,您甚至都无法注意到这一点。在这种情况下使用 ctrl + f5 程序会自行停止并冻结控制台。现在,如果控制台将消失,请尝试在 printf 上方添加断点(单击上面的行并按 f9 红点将出现在左侧)现在按 f5 控制台将在此行停止,然后按 f10 如果 printf 有问题,您将看到崩溃关系
  • 没问题 :) 关闭问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
相关资源
最近更新 更多