【发布时间】:2021-05-10 22:46:40
【问题描述】:
我有以下任务:
读取以下格式的逗号分隔数据:
string1, string2, integer_number
例如:Hi, Hello, 123 John, Doe, 45
我编写了以下代码来处理这种情况。 问题是我必须区分以下几种情况:
-
asd, asd, asd
-
asd, asf
但是在这两种情况下,scanf返回值2这是正确的行为,因为据我了解,首先没有给出整数,其次没有第三个值。 所以,我需要一些帮助,如何将扫描集设置为仅在包含一些文本和逗号 - >“文本”时作为正确的字符串数据传递。 或者我应该使用与scanf()不同的功能。
使这项任务更难的是要求不使用任何由 [] 声明或动态分配的附加数组。这必须仅使用这 3 个变量来完成。不允许使用其他缓冲区。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char string1[20];
char string2[20];
int number;
printf("Type data:\n");
int ret_val = scanf("%[a-zA-Z], %[a-zA-Z], %d", string1, string2, &number);
if (ret_val != 3) {
printf("ret_val %d", ret_val);
return 1;
}
printf("%s %s %d\n", string1, string2, number);
return 0;
}
【问题讨论】:
-
那么这两种情况应该怎么办?
-
asd, asd, asd - 应该认识到只有 string1 和 string2 被正确读取。 asd, asf - 应该认识到只有 string1 被正确读取
-
scanf将返回 2,所以这意味着只有 string1 和 string2 被正确读取......并且......?也许我不明白你在追求什么...... -
每个字符串必须以逗号结尾
-
不,因为没有您可以使用的“功能”。您必须自己编写代码。