gpt4 book ai didi

求平均值的C程序,代码有什么问题?

转载 作者:行者123 更新时间:2023-12-02 08:38:07 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
double sum = 0;
int ii = 0;
char buf[256], *token;
printf("Enter the numbers to average on a single line, separated by space and press enter when done\n");
fgets(buf, 255, stdin);
token = strtok(buf, " ");
while (token != NULL)
{
sum += atof(token);
ii++;
token = strtok("", " "); // Get next number
}
printf("Average is %lf", sum / (double)ii);
return 0;
}

上面的程序是求用户给出的数字的平均值。程序没有错误。我有这些代码问题:

当你运行它时,它会要求你输入编号。用您找到平均值的空格分隔。当您输入以空格分隔的数字时 -例如你输入 - 9080 5749 4343 8509 9790 ,然后它会打印第一个数字作为答案(即 9080)。如果你输入 9497 795 88 那么它会打印出“Average is 9497.00000000”。如果你输入 27 59 05 那么它会打印“Average is 27.0000000”等等。

谁能告诉我这是怎么回事?我尝试用 getline() 替换代码的 gets(),但它在输出时给出了“Segmention Fault”错误。

最佳答案

问题在于您调用 strtok 的方式:

On a first call, the function expects a C string as argument for str, whose first character is used as the starting location to scan for tokens. In subsequent calls, the function expects a null pointer and uses the position right after the end of last token as the new starting location for scanning. (emphasis is mine)

您传递的是空字符串 "" 而不是 NULL,这就是结果仅包含用户输入的第一项的原因。

注意:由于 strtok 不可重入,您应该考虑切换到 strtok_r .

关于求平均值的C程序,代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19251134/

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