我目前正在尝试使用C编写程序(对C来说很新 - 只学习了2周),我想通过stdin从用户那里获得一串输入,其中字符串包含一个字符,然后是2个浮点数(每个浮点数之间有空格)。例如:" y 2.1 1.1"。 我的问题是如何获取和存储3个输入,同时确保第一个是char,以下两个输入是浮点数?
答案 0 :(得分:1)
坚持使用sscanf()
,但不要忘记检查其返回值(查看here)。输入“y 1u 1”的实际情况是sscanf
将读取并存储有效的char
,然后它将读取并存储int
} 1,这是有效的,然后停止,因为“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');
答案 1 :(得分:0)
如何获取并存储3个输入,同时确保第一个是char,以下两个输入是整数?
这段代码的问题是最后有多余的空格,我不知道如何摆脱它。
使用sscanf()
并检查扫描变量后是否有额外任何的简单方法是使用"%n"
记录此时扫描的位置。
char in1;
int in2, in3;
int n = 0;
sscanf(array,"%c %d %d%n", &in1, &in2, &in3, &n);
if (n > 0 && (array[n] == '\n' || array[n] == '\0')) {
Success(in1, in2, in3);
}
检查sscanf()
的结果始终很重要。一种方法是检查它的返回值,这里应该是3。不幸的是,这并没有告诉我们in3
之后是否存在任何问题。通过设置n == 0
然后测试n > 0
,代码知道扫描已成功完成"%n"
。代码还可以测试扫描停止的字符。