gpt4 book ai didi

c - 无法调用函数而不陷入无限循环

转载 作者:行者123 更新时间:2023-11-30 16:17:08 24 4
gpt4 key购买 nike

当调用并运行以下函数时,如果满足初始“if”条件,则程序按预期运行;重复地。如果不满足初始“if”条件,程序将继续运行 else 语句,但会陷入无限循环。

为什么?

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

int num_func();

int main()
{
num_func();

return 0;
}

int num_func()
{
int num;
char yn[1];

printf("Please enter an integer value: ");

if (scanf("%d", &num) == 1)

{
printf("The value you entered is: %d. Is this correct? ", num);
scanf("%s", &yn);

if (strcmp(yn, "y") == 0) {
printf("Great! \n");
}

else if (strcmp(yn, "n") == 0) {
printf(":( \n");
}

else {
printf("Illegal Entry. \n");
}
}

else {
printf("You were told to put in a number!");
}

num_func();
}

我也有兴趣了解如何创建 num 和 yn[1] 全局变量,以便 num_func() 可以访问它们,而无需每次运行分配内存。如果您能解释一下,我将不胜感激。

最佳答案

按照答案here 。对于无效输入,stdin 不会被清除,因此您需要自己清除它。否则,下次调用 scanf 时,它会发现仍有数据需要读取,并尝试再次读取无效数据。

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

int num_func();

int main()
{
num_func();

return 0;
}

int num_func()
{
int num, c;
char yn[1];

printf("Please enter an integer value: ");

if (scanf("%d", &num) == 1)

{
printf("The value you entered is: %d. Is this correct? ", num);
scanf("%s", &yn);

if (strcmp(yn, "y") == 0) {
printf("Great! \n");
}

else if (strcmp(yn, "n") == 0) {
printf(":( \n");
}

else {
printf("Illegal Entry. \n");
while ((c = getchar()) != EOF && c != '\n')
continue;
}
}

else {
printf("You were told to put in a number!\n");
while ((c = getchar()) != EOF && c != '\n')
continue;
}

num_func();
}

就第二个问题而言,为了节省空间而将变量设置为全局变量是完全没有必要的,因为该函数的堆栈帧已经小到可以忽略不计了。

关于c - 无法调用函数而不陷入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56334558/

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