如何使用fgets从键盘扫描格式化输入(字符串)?

时间:2013-08-25 05:58:05

标签: c string fgets

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

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

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

4 个答案:

答案 0 :(得分:1)

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

范围内

答案 1 :(得分: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(),因为它告诉您第一个未转换的字符,您希望它是字符串的终止空值。您还可以通过除以10,000来验证该数字是13XXXX并检查结果是13.您可能还想查看前6个非空白字符后面的内容({{1}中剩下的内容) })等等。

答案 2 :(得分:0)

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

sNum[b]应为sNum,这是一个指针。

使用fgets从stdin获取一行后,您可以使用regular expression检查该行:"^13.+"

答案 3 :(得分:0)

听起来像是在寻找fscanf

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