0

我需要使用fgets从键盘获取格式化输入(即格式为 13XXXX 的学号)。我知道scanf这可能是可能的,但我不太确定fgets. 如何确保用户输入以 开头的字符串13

printf ( ">>\t\tStudent No. (13XXXX): " );
fgets ( sNum[b], sizeof (sNum), stdin);

编辑: sNum是学生编号的字符串。谢谢。

4

4 回答 4

1

使用 fgets 获取字符串,然后使用 sscanf 解释它。%i 的格式字符串会将字符串解释为数字。sscanf 的返回值将告诉您该解释是否成功(即用户输入了一个数字)。一旦你知道了,然后将这个数字除以 10,000。如果结果是 13,那么您知道输入的数字在 13x,xxx 范围内

于 2013-08-25T06:06:06.760 回答
1

您的呼叫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)等。

于 2013-08-25T06:06:59.410 回答
0
printf ( ">>\t\tStudent No. (13XXXX): " );
fgets ( sNum[b], sizeof (sNum), stdin);

sNum[b]应该是sNum,它是一个指针。

在使用 fgets 从 stdin 获取一行后,您可以使用正则表达式检查该行: "^13.+"

于 2013-08-25T06:07:27.043 回答
0

听起来你正在寻找fscanf.

int fscanf ( FILE * stream, const char * format, ... );

于 2013-08-25T06:09:18.167 回答