gpt4 book ai didi

c - 如何规范用户输入的数据?

转载 作者:行者123 更新时间:2023-11-30 14:51:46 25 4
gpt4 key购买 nike

我需要一些帮助来了解如何在 C 程序中输入数据。到目前为止,我使用的 java 语法具有方便的 try{}catch(){};子句,但我在 C 上没有看到它(或者我还没有找到它?)。

假设我有以下数组;

float f_array[10];

通常我要输入数据,我要么使用 scanf(...);或我可以从中读取输入的文件,但为了简单起见,我们假设我使用 scanf(...);

我有以下内容;

int i;
for(i = 0; i<10; i++){
scanf("%f", &f_array[i]);
}

现在,我的问题是如何限制用户输入字符或字符串或错误的数据类型?另外,我应该在实际将值放入数组之前尝试初始化数组吗?

最佳答案

请注意,scanf()返回成功读取的元素数量,您可以检查它:

int success = scanf(...);
if (!success) {
scanf("%*[^\n]%*c"):
// OR while(getchar() != '\n');
}

但是,有一个复杂的解决方案。您不使用 scanf(),而是编写一个自定义输入方法来处理击键并过滤掉无效字符,可能使用 getch() (Windows/nCurses)。这是最小化的 Windows 版本:

void readFloat(float* in){
int ch, ind = 0;
char buf[100];
while (1){
ch = getch();
if (ch >= '0' && ch <= '9' || ch == '.') {
buf[ind++] = (char)ch;
putchar(ch);
}
else if (ch == 8) /* Backspace */ {
printf("\b \b");
ind --;
}
}
buf[ind] = '\0';
float ret;
sscanf(buf, "%f", &ret);
return ret;
}

代码的可能结果:

用户输入(按键):123aaa.bbb456
节目过滤器(显示在屏幕上):123.456
返回值:(float)123.456

关于c - 如何规范用户输入的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48039340/

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