gpt4 book ai didi

c - 使用 sscanf 将元素添加到每个索引的 int 数组中

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

所以,我们有一个“机器问题”,我们应该获得多项式的根。我的问题是:有没有办法将每个索引的元素添加到 int 数组中。

这是我的代码(顺便说一句,它只是一个函数)

void coeffunc(int degree){
char coef[1000];
int coefs[1000], i;

printf("Enter %d integer coefficients starting from the 0th degree.\nSeparate each input by a comma: ", degree);
fgets(coefs, 999, stdin);
for(i=0;i!=degree;i++){
sscan(coef, "%d[^,]", &coefs[i]);
}

这段代码的问题是,如果输入是字符,我不确定如何捕获错误。

最佳答案

使用“%n”保存已扫描字符的计数,以便知道在哪里继续扫描。

#include <stdio.h>
#define BUFSIZE 1000

void coeffunc(int degree) {
char coef[BUFSIZE];
int coefs[BUFSIZE / 2]; // Number of integer certainly less than < BUFSIZE/2

printf("Enter %d integer coefficients starting from the 0th degree.\n"
"Separate each input by a comma: ", degree);
if (fgets(coef, sizeof coef, stdin) == NULL) {
return;
}
static const char *format[2] = {
"%d %n",
" ,%d %n" };
char *p = coef;
int i;
for (i = 0; i < degree; i++) {
int n = 0;
sscanf(p, format[i > 0], &coefs[i], &n);

// Catch potential error
if (n == 0) break;

p += n;
}

// More error detection
if (*p) Fail(); // Extra text on the line
if (i < degree) Fail(); // No enough values
}
<小时/>

如果 VLA 允许(可变大小的数组),另一种缓冲区大小方法

#include <stdlib.h>
// bit_width*log10(2) rounded-up and sign
#define INT_TEXT_WIDTH (sizeof(int)*CHAR_BIT/3 + 1 + 1)
// ", "
#define COMMA_SPACE 2
// \r\n\0
#define LINE_END 3
#define BUF_NEEDED(n) ((INT_TEXT_SIZE + COMMA_SPACE) * (n) + LINE_END)

void coeffunc(int degree) {
int coefs[degree];
// To cope with those who like lots of spaces, leading zeros, use a 2x buffer
char coef[BUF_NEEDED(degree) *2];
...

关于c - 使用 sscanf 将元素添加到每个索引的 int 数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32866446/

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