gpt4 book ai didi

c - 无法从C程序中的字符串中提取完整数字

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

计算用户给出的 n 个数字的平均值的程序。

好的,我有这个程序,其目的就是您在上面读到的内容。它的输出不太正确。我找出了问题所在,但找不到解决方案,因为我不是编程专家(实际上是新手)。这是代码:

#include <stdio.h>

int main(void) {
char user_data[100];
long int sum = 0;
double average;
unsigned int numbers_count = 0;

for (int i = 0; i <= 99; ++i)
user_data[i] = 0;

unsigned int numbers[100];

for (int i = 0; i <= 99; ++i)
numbers[i] = 0;

printf("Please enter the numbers:");

fgets(user_data, sizeof(user_data), stdin);

int i = 0;
while (user_data[i] != 0) {
sscanf(user_data, "%u", &numbers[i]);
++i;
}

i = 0;
while (numbers[i] != 0) {
sum += numbers[i];
++i;
}

i = 0;
while (numbers[i] != 0) {
++numbers_count;
++i;
}

average = (float)sum / (float)numbers_count;

printf("\n\nAverage of the entered numbers is: %f",average);

return 0;
}

现在问题来了。

当我输入一个整数(例如23)时,它会以两个单独的字节存储到user_data中。我添加了一个循环来打印 user_data[i] 的值,以找出问题所在。

    i = 0;
while (i <= 99) {
printf("%c\n",user_data[i]);
++i;
}`

结果是这样的

user_data insight

这是第一个问题,第二个问题来了。我添加了另一个与上面的循环相同的循环来打印数字[100]中存储的数字并找出问题所在,这是输出。这是一个示例

numbers stored in numbers[]

现在我的主要问题是

如何从user_data中提取完整号码?

最佳答案

我相信在“23”的 fgets() 之后布局 user_data 可能会有所帮助(假设 Linux 或 Mac 换行):

 +-----+-----+----+----+
| '2' | '3' | \n | \0 | .....
+-----+-----+----+----+
0 1 2 3

请注意,user_data[0]包含 2(数字 2)!它包含“2”(字符“2”),其代码为(同样假设 Linux)0x32(十六进制或十进制 50)。

这就是为什么您尝试打印 user_data[] 的值没有取得成果:您试图打印数字的表示,而不是数字本身.

要将字符串转换为它表示的整数,您可以执行以下操作:

 num = atoi(user_data)

函数atoi() 会为您完成这项工作。更灵活的函数是 strtol(),它的作用与 long int 相同(并且还可以处理表示基数不是 10 的数字的字符串)。

我希望这能回答您的问题:如何从 user_data 中提取完整的号码?

还有一些其他地方您应该清理和简化代码,但如果需要帮助,您可以提出另一个问题。

关于c - 无法从C程序中的字符串中提取完整数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44660782/

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