gpt4 book ai didi

c - 如何使用 fgets 和 strtok 获取多个输入?

转载 作者:行者123 更新时间:2023-11-30 19:12:40 24 4
gpt4 key购买 nike

我在使用 fgets()strtok() 接收输入并相应地拆分它们时遇到问题。

假设我有一个接受输入 1-9 的主菜单,并且每个输入都会导致另一个功能。我在每个函数上仅使用 if 语句和 break 语句来做到这一点。现在假设有另一个命令需要一个字符串,然后是一个空格,然后是 2 个整数,我该如何将它写在我的菜单中?

在菜单中的任何时间,它都可以读取单个整数 (1-9),也可以读取 "start 5,9,forward""start ,4 ,2,向后” 在该菜单中。我是否编写一个逻辑,表示如果输入“开始”,则继续继续,但我不知道如何制作它,以便它在开始后读取空格输入并读取 2 个整数和最后一个字符串。

抱歉,如果我的问题有点令人困惑,但我只想知道一个示例,如果在一行中接收多个输入并能够操纵这些输入变量。

最佳答案

使用fgetsstrtok:

这几乎就是@Cool Guy所说的。

...
fgets(buff, sizeof buff, stdin);
char a[25], d[25];
int b, c;
char *p = strtok(buff, ", "); //this will cut the input at an occurrence of `,` or `' '`, whatever happens first. At this point you would have the string "start" pointed by `p`.
strcpy(a, p);
p = strtok(NULL, ", ");
if(p) {
b = atoi(p);
if(b < 0 || b > 9) {
//input error
}
}
p = ...

其余类似。

使用 scanf 解决方案:

您可以使用 scanf 读取输入(是的,这是一个强大的功能)。

scanf(" %N[^,' '] ,%1d%*[^,' '] ,%1d , %N[^\n]", a, &b, &c, d);

"%N[^,' ']" 将读取输入,直到第一个 ,' '(空格)到达。另外,将 N 替换为 a - 1;

的大小

%1d%*[^,' '] 将读取一位数的整数并丢弃其余输入,直到找到 , 并将其存储在b;

%N[^\n] 将读取该行的其余部分并将其存储在 d 中。将 N 替换为 d - 1 的大小。

scanf 可以使用很多技巧。请注意,在这种情况下,scanf 格式中的所有空格都很重要。另外,我不会处理用户输入错误输入格式的情况,但这是可能的。

关于c - 如何使用 fgets 和 strtok 获取多个输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36664801/

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