gpt4 book ai didi

c - fflush(stdin) ANSI C

转载 作者:行者123 更新时间:2023-12-02 17:53:44 25 4
gpt4 key购买 nike

我是 ANSI C 的初学者,我有一个问题,这可能是一个愚蠢的问题,对此我感到抱歉。

#include<stdio.h>
main()
{
int age;
printf("Hello World!\n");
printf("Please enter your age: ");
scanf("%d", &age);
printf("You entered %d\n", age);
fflush(stdin);
getchar();
}

这是我学习scanf函数的第二个程序。我的问题是: 我知道 printfscanffflushstdingetchar 已定义在 stdio.h 中,但仅当我使用 fflush(stdin) 时,我必须放置 #include<stdio.h>,但是当使用任何其他方法时,我可以删除该行#include。

最佳答案

必须#include <stdio.h>当您调用该 header 中声明的任何函数时。

好吧,这并不完全正确。在 1989/1990 版本的语言标准中,调用可以创建函数的隐式声明。如果这恰好与正确的声明相匹配,那么您就可以逃脱惩罚;。否则,你的程序的行为是未定义的——这意味着你仍然可能逃脱它,或者没有,但编译器不需要警告你。自 printf采用可变数量的参数,您必须有一个可见的声明以避免未定义的行为 - 获取可见声明的方法是 #include <stdio.h> .

(您也可以自己声明该函数,但这很容易出错,而且没有充分的理由这样做。)

在 C99 及更高版本中,没有隐式声明。

main()应该是int main(void) .

fflush(stdin)有未定义的行为。如果您想丢弃 scanf() 之后输入的字符调用,您可以读取并丢弃它们。

关于c - fflush(stdin) ANSI C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11604575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com