提问人:D Chang 提问时间:11/14/2023 更新时间:11/15/2023 访问量:73
如何获取接受浮点数或字符作为值的 C 输入
How to get C input that accepts a float or a character as a value
问:
正如我所说,我需要能够接受字符 a b c d e 作为输入,但它也需要能够接受任何浮点数。我不确定这是否可能,但如果有人知道一个简单的解决方法,将不胜感激。我不想使用任何输入来询问用户他们将事先输入什么数据类型。
答:
1赞
chux - Reinstate Monica
11/15/2023
#1
简单的方法是将一行用户输入读取到字符串中,然后以多种方式解析字符串。fgets()
用于记录扫描的偏移量(如果扫描到那么远),以检测成功并查找尾随垃圾。" %n"
允许前导和尾随空格。
// Read input as a,b,c,d,e or a float
// Return 2: if float
// Return 1: if char
// Return 0: neither
// Return EOF: end-of-file
int read_char_or_float(char *ch, float *f) {
char buf[100];
if (fgets(buf, sizeof buf, stdin) == NULL) {
return EOF;
}
// Scan for white-space, one_a_to_e, white-space
int n = 0;
char s[2];
sscanf(buf, " %1[a-e] %n", s, &n);
if (n > 0 && buf[n] == '\0') {
*ch = s[0];
return 1;
}
// Scan for white-space, float, white-space
n = 0;
sscanf(buf, " %f %n", f, &n);
if (n > 0 && buf[n] == '\0') {
return 2;
}
return 0;
}
更好的代码将用于解析 ,但可以启动 OP。strtof()
float
errno = 0;
char *endptr;
*f = strtof(buf, &endptr);
if (endptr > buf && errno == 0) {
while (isspace(*((unsigned char*)endptr))) {
endptr++;
}
if (*endptr == '\0') {
return 2;
}
}
return 0;
下一个:如何在 C 中只计算一个句点?
评论
strtod
fgets()
strtod()
double
"abcde"