我是一名学生,我们的老师给了我这个功能来获取用户输入。它用于整数,但我很困惑为什么会有 char 数据类型。如果有人可以解释这个功能,那就太好了。
#pragma warning (disable: 4996)
int getNum(void)
{
char record[121] = {0};
int number = 0;
fgets(record, 121, stdin);
if( sscanf(record, "%d", &number) != 1)
{
number = -1;
}
return number;
}
例如,调用时我们这样做:
int age = 0; //we always have to initialize
age = getNum(); //this is how we call the function to get user input
最佳答案
char record[121]
变量实际上是字符的数组,也称为字符串。在这里使用它是为了如果给出了错误的输入(而不是有效的 integer 输入),那么输入流仍然会被 fgets()
调用清除,它接收 所有 个字符,直到(包括)换行符。
然后 sscanf
函数尝试从读取的字符串中提取有效整数,如果失败,则将错误值 (-1
) 分配给信号那个事实。如果成功,它会将给定的输入值分配给 number
,就像 成功 调用 scanf("%d", &number)
会。
但是,仅使用这样一个简单的 scanf()
调用可能会在输入流中留下“未处理的”字符,这可能会导致任何后续输入操作出现问题(或要求输入流是已清除)。
使用这种技术还可以防止用户在有效输入后键入额外 字符而导致的不良/意外效果。例如,如果您输入 1a
以响应第一个提示,以下(故意糟糕的)代码将引起“意外”:
#include <stdio.h>
int main()
{
int number = 0, number2 = 0;
printf("Enter first number: ");
scanf("%d", &number);
printf("Enter second number: ");
scanf("%d", &number2);
printf("Given numbers were: %d and %d.\n", number, number2);
return 0;
}
但是,使用您老师提供的 getNum()
函数,以下代码更加健壮:
int main()
{
int number = 0, number2 = 0;
printf("Enter first number: ");
number = getNum();
printf("Enter second number: ");
number2 = getNum();
printf("Given numbers were: %d and %d.\n", number, number2);
return 0;
}
关于c - 为什么此函数中使用 Char 数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64701442/