Scanf 导致 C 程序崩溃

Posted

技术标签:

【中文标题】Scanf 导致 C 程序崩溃【英文标题】:Scanf causes C program to crash 【发布时间】:2012-01-07 00:56:23 【问题描述】:

这个简单的问题导致我的整个程序在第一次输入时崩溃。如果我删除输入,程序可以正常工作,但是一旦我将 scanf 添加到代码中并输入输入,程序就会崩溃。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXEMPS 3


// stub program code
int main (void)
    char answer;

    do
    

        printf("\n Do you have another(Y/N): ");
        scanf("%c", answer);
    while(answer == 'Y' || answer == 'y');

    getchar();
    printf("  Press any key ... ");
    return 0;
 // main

【问题讨论】:

fflush(stdin)(或任何其他输入了最后一个操作的流)未由标准定义。如果您使用的是 Windows,则操作定义明确……但如果您的代码将在任何其他操作系统上编译,您将遇到一个您现在可以避免的错误。不要fflush(stdin)! 感谢您提供有关 fflush 的信息,我的教授让我们使用它。 嗯……等效的标准成语是int flushstdin(void) int ch; while (((ch = getchar()) != '\n') &amp;&amp; (ch != EOF)) /* void */; return ch == EOF ? EOF : 0; 。与教授交谈并改用它 【参考方案1】:

你必须将变量的地址传递给scanf:

 scanf("%c", &answer);

【讨论】:

【参考方案2】:

使用“&answer”。并摆脱多余的“fflush()”命令...

更好,替换为“answer = getchar()”。

【讨论】:

以上是关于Scanf 导致 C 程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在简单方程中用 scanf 替换 get 会使程序崩溃

为啥程序退出时全局或静态对象会导致崩溃?

C程序为啥会崩溃?

不总是导致程序崩溃的预期缓冲区溢出

Assembly.UnsafeLoadFrom 导致 Web 应用程序崩溃

C#数独求解器计算导致崩溃