gpt4 book ai didi

c - 程序不断接受三个数字,并打印这三个数字中的最大值

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

该程序不断接受三个数字,并打印这三个数字中的最大值。我收到运行时错误(SIGABRT)这是我的代码

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

int main()
{
char ch[30];
char *c[3];
long int i[3], mx_2;
int o;
while((fgets(ch,sizeof(ch),stdin))&&ch!='\0')
{
c[0] = (char *)malloc(10);
c[1] = (char *)malloc(10);
c[2] = (char *)malloc(10);
c[0] = strtok(ch," ");
c[1] = strtok(NULL," ");
c[2] = strtok(NULL," ");
i[0] = atoi(c[0]);
i[1] = atoi(c[1]);
i[2] = atoi(c[2]);
mx_2 = i[0] > i[1] ? (i[0] >i[2] ? i[0] : i[2]) : (i[1] > i[2] ? i[1] : i[2]);
printf("%ld\n",mx_2);
fflush(stdin);
for (o = 0; o < 3; o++) {
free(c[o]);
}
}

return 0;
}

各位有什么帮助吗谢谢

最佳答案

当你执行c[0] = malloc(10);并且稍后你执行c[0] = strtok(...);时,你是使用 strtok(3)(本身就是一个指针)的结果覆盖 c[0] 处的指针值,而不是复制字符串内容。当到达 free(3)for 循环时,您将把 strtok< 给出的值传递给 free() 函数 而不是从 malloc() 给出的那些(当您重新分配数组 c 值时,这些值将永远丢失),因此这是 最可能的原因>SIGABRT

顺便说一句,您甚至不需要在程序中执行任何 mallocfree 操作。只需获得一个足够长的缓冲区来存储整行输入,然后使用 strtok 获取所有 block 。另一方面,您必须测试 strtok 结果,就好像没有更多数据(您只输入两个值)它将返回 NULL

这段代码不仅可以完成三个值的工作,还可以完成数组大小以下的任何数字的工作:

#include <stdio.h> /* for input output routines like fgets */
#include <stdlib.h> /* for the constant EXIT_SUCCESS */
#include <limits.h> /* for INT_MAX and INT_MIN */
#include <string.h> /* for strtok */

int main()
{
char buffer[1024];
while (fgets(buffer, sizeof buffer, stdin)) {
/* we have one full line of input up to sizeof buffer chars. */
int max = INT_MIN;
int min = INT_MAX;
char *s = strtok(buffer, " \t\n");
if (!s) {
fprintf(stderr, "Invalid line\n");
continue;
}
while (s) {
int x = atoi(s);
if (x > max) max = x;
if (x < min) min = x;
s = strtok(NULL, " \t\n");
}
if (max != INT_MIN)
printf("MAX: %d\n", max);
if (min != INT_MAX)
printf("MIN: %d\n", min);
} /* while */
return EXIT_SUCCESS;
} /* main */

关于c - 程序不断接受三个数字,并打印这三个数字中的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34094714/

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