我需要使用fgets
从键盘获取格式化输入(即格式为13XXXX的学号)。我知道scanf
这可能是可能的,但我对fgets
不太确定。如何确保用户输入以13
开头的字符串?
printf ( ">>\t\tStudent No. (13XXXX): " );
fgets ( sNum[b], sizeof (sNum), stdin);
编辑: sNum
是学号的字符串。
感谢。
答案 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, ... );