gpt4 book ai didi

c - 如何限制c中的输入

转载 作者:太空宇宙 更新时间:2023-11-04 06:44:55 26 4
gpt4 key购买 nike

我想阻止我的程序使用任何其他类型的输入而不是 int。如何在不将其分配给变量的情况下检查输入的类型?在 C 中

最佳答案

参见 strtod , strtol和 friend 。

所有这些函数都有一个输出参数(通常称为 endptr),它向您显示转换结束的位置。您可以使用该信息来确定要转换的输入是整数还是 float ,或者根本不是数字。

策略是尝试将输入解析为以 10 为底的长。如果这不起作用(即如果有未转换的字符),请查看是否将其解析为双重工作。如果两者都不起作用,则输入不是数字。显然,您必须决定要将哪种基本类型用于数字。您可以构建更多检查和改进,但这里是一个简单的示例。

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

struct a_number {
unsigned char is_long;
union {
double d;
long i;
};
};

int main(void) {
int n;
char *input_strings[3] = {
"1234","1234.56", "12asdf"
};

struct a_number *numbers[3];

for (n = 0; n < 3; ++n) {
char *start = input_strings[n];
char *end;
long i = strtol(start, &end, 10);
if ( *end == '\0' ) {
struct a_number *num = malloc(sizeof(*num));
assert( num );
num->is_long = 1;
num->i = i;
numbers[n] = num;
}
else {
double d = strtod(start, &end);
if ( *end == '\0' ) {
struct a_number *num = malloc(sizeof(*num));
assert( num );
num->is_long = 0;
num->d = d;
numbers[n] = num;
}
else {
numbers[n] = NULL;
}
}
}

for (n = 0; n < 3; ++n) {
if ( numbers[n] ) {
if ( numbers[n]->is_long ) {
printf("%ld\n", numbers[n]->i );
}
else {
printf("%g\n", numbers[n]->d );
}
}
}

return 0;
}

关于c - 如何限制c中的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1696217/

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