我需要使用fgets
从键盘获取格式化输入(即格式为 13XXXX 的学号)。我知道scanf
这可能是可能的,但我不太确定fgets
. 如何确保用户输入以 开头的字符串13
?
printf ( ">>\t\tStudent No. (13XXXX): " );
fgets ( sNum[b], sizeof (sNum), stdin);
编辑: sNum
是学生编号的字符串。谢谢。
使用 fgets 获取字符串,然后使用 sscanf 解释它。%i 的格式字符串会将字符串解释为数字。sscanf 的返回值将告诉您该解释是否成功(即用户输入了一个数字)。一旦你知道了,然后将这个数字除以 10,000。如果结果是 13,那么您知道输入的数字在 13x,xxx 范围内
您的呼叫fgets()
可能是错误的。
char line[4096];
char student_no[7];
printf(">>\t\tStudent No. (13XXXX): ");
if (fgets(line, sizeof(line), stdin) == 0)
...deal with EOF...
if (sscanf(line, "%6s", line) != 1)
...deal with oddball input...
if (strlen(student_no) != 6 || strncmp(student_no, "13", 2) != 0)
...too short or not starting 13...
您可以根据需要应用更多条件。例如,XXXX 应该是数字吗?如果是这样,您可以将字符串转换为int
,可能使用strtol()
since 会告诉您第一个未转换的字符,您希望它成为字符串的终止 null。您还可以通过除以 10,000 并检查结果是否为 13 来验证该数字是否为 13XXXX。您可能还想查看前 6 个非空白字符之后的内容(剩余的内容line
)等。
printf ( ">>\t\tStudent No. (13XXXX): " );
fgets ( sNum[b], sizeof (sNum), stdin);
sNum[b]
应该是sNum,它是一个指针。
在使用 fgets 从 stdin 获取一行后,您可以使用正则表达式检查该行: "^13.+"
。
听起来你正在寻找fscanf
.
int fscanf ( FILE * stream, const char * format, ... );