C 编程 - 用于由空格分隔的 tkens 的 sscanf

标签 c scanf fgets strtok

我目前正在尝试使用 C 编写一个程序(对 C 很陌生——只学了 2 周),我想通过标准输入从用户那里获取一个输入字符串,其中该字符串有一个字符,后跟 2 个 float (每个 float 之间有空格)。例如:“y 2.1 1.1”。 我的问题是如何获取和存储这 3 个输入,同时确保第一个输入是字符,而后两个输入是 float ?

最佳答案

坚持使用 sscanf(),但不要忘记检查它的返回值(查看 here )。输入 "y 1u 1" 真正发生的是 sscanf 将读取并存储有效的 char,然后它将读取并将有效的int1存入,然后停止,因为“u”不匹配格式串。

下面是示例代码(使用 scanf() 而不是 fgets()sscanf())。

char in1;
int in2,in3;
int retval;

/*
char array[100] = {'\0'};
fgets(array, 100, stdin);
retval = sscanf(array, "%c %d %d", &in1, &in2, &in3);
*/
retval = scanf("%c %d %d", &in1, &in2, &in3);

printf("Scanned %d items\n", retval);

printf("Here they come: ");
if(retval > 0) {
    printf("%c ", in1);
}
if(retval > 1) {
    printf("%d ", in2);
}
if(retval > 2) {
    printf("%d", in3);
}
putchar('\n');

关于C 编程 - 用于由空格分隔的 tkens 的 sscanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36235050/

相关文章:

c - RDMA_CREATE_QP/RDMA_CREATE_EP 和 IBV_CREATE_QP 有什么区别?

c - 在 C 中的循环中分配和释放内存

c++ - 在不使用单个 if 的情况下执行某些语句

c - scanf ("%s") 存储字符串,即使在 scanf ("%d"之后使用它之后

c - 将 fgets() 与 char* 类型一起使用

c - 我如何知道 main() 在内存中的位置?

谁能用c语言为我简化这段代码?

带有 char 的条件在 C 中不起作用

c - 如何在 linux 终端上用 C 打印这段代码中的所有字符?

c - 是否可以区分fgets返回的错误