gpt4 book ai didi

C 解析器程序添加由 ; 分隔的数字列表在多行上使用 read() 获取输入

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:39 25 4
gpt4 key购买 nike

我想编写一个程序,将数字作为多行的输入,这些行由比方说识别/分隔;字符并打印出它们的总和。示例:

1 2 3; 4 5 6; 7 8 9;(enter)
10 11 12;(enter)
exit(enter)

我希望预期的输出完全像:

List 1: 6 (sum of 1 2 3)
List 2: 15 (sum of 4 5 6)
List 3: 24 (sum of 7 8 9)
List 4: 33 (sum of 10 11 12)

sum of a b c,打印出来这不是必需的,但它们的数字结果是 (enter),即我正在按 enter/进入新行。

我将在用户输入退出时终止。但是我的代码中出现段错误。另外,在这段代码中,总和也得到了错误的值(我单独尝试过)。

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

int main() {
char *b;
int sum = 0;
int rc;
int i = 1;

while (strcasecmp(b, "exit") != 0) {
char buff[50];
rc = read(0, buff, 50);
if (rc == -1) {
perror("");
exit(0);
}
char *a = buff;
b = strtok(a, "\n");
char *c = strtok(b, ";");
while (c != NULL) {
char *d = strtok(c, " ");
while (d != NULL) {
int a = atoi(d);
sum += a;
d = strtok(NULL, " ");
printf("List %d: %d", i, sum);
i++;
}
c = strtok(NULL, ";");
}
}
}

最佳答案

您可以使用 getchar 并像下面这样即时解析整数,无需 strtok

int main() {

int sum = 0; int rc; int i = 0, j = 0;
char buff[50] = "";

while(1) {

if (i>= sizeof buff) break; //not enough memory

if (read(STDIN_FILENO, &buff[i], 1) < 1) {break;} //read error

if (strcasecmp(buff, "exit") == 0) break;
else if (buff[i] == ';'){
buff[i] = '\0';
int a = atoi(buff);
sum += a;
printf("sum = %d\n", sum);
sum = 0;
i = 0;
memset(buff, 0 , sizeof buff);
}
else if (buff[i] == ' '){
buff[i] = '\0';
int a = atoi(buff);
sum += a;
i = 0;
}
else if (buff[i] != '\n'){
i++;
}
}
}

关于C 解析器程序添加由 ; 分隔的数字列表在多行上使用 read() 获取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57038248/

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