gpt4 book ai didi

c - fgets 不提示用户输入。有什么不同?

转载 作者:行者123 更新时间:2023-11-30 18:30:37 25 4
gpt4 key购买 nike

我有两个使用 fgets 的场景如下。两个场景都在同一个文件中,如下所示。

struct sth
{
char str[10];
int num;
};

void getIt(struct sth **M){
char *b;
(*M)=malloc(sizeof(struct sth));

printf("give me an integer:");
fgets(b,1,stdin); // output must be an address
(*M)->num = atoi(b);

printf("give me a string:");
fgets((*M)->str,10,stdin);

}


int main(int argc, char const *argv[])
{
struct sth *myThing;
getIt(&myThing);
printf("Heres the string %s\n", myThing->str);
printf("Heres the num \n", myThing->num);
return 0;
}

这是输出。请注意,它不会提示用户输入整数,它只是打印“给我一个整数”,然后直接转到下一个打印语句。为什么要这样做?

give me an integer:give me a string:sdf
Heres the string sdf

Heres the num

这个小问题是一个大问题中的一个更大的问题,所以这只是大问题的一个缩影。

最佳答案

你有:

fgets(b,1,stdin);  // output must be an address 

但是,b 必须是有效地址才能保存您要读取的数据。在您的代码中,b 被定义为一个指针,但它不指向任何有效地址。

大致如下:

char b[20]; // Make it large enough to hold the data

是必要的。

我不确定您为什么使用 fgets 读取数据并使用 atoi 将其转换为数字。另一种选择是使用 fscanf

关于c - fgets 不提示用户输入。有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29735714/

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