C 如何使用FGET从键盘扫描格式化输入(字符串)?
我需要使用C 如何使用FGET从键盘扫描格式化输入(字符串)?,c,string,fgets,C,String,Fgets,我需要使用fgets从键盘获取格式化输入(即,格式为13XXXX的学号)。我知道使用scanf这是可能的,但我不太确定使用fgets。如何确保用户输入以13开头的字符串 printf ( ">>\t\tStudent No. (13XXXX): " ); fgets ( sNum[b], sizeof (sNum), stdin); 编辑:sNum是学生编号的字符串。 谢谢。使用FGET获取字符串,然后使用sscanf进行解释。格式字符串%i将把该字符串解释为数字。sscanf的返
fgets
从键盘获取格式化输入(即,格式为13XXXX的学号)。我知道使用scanf
这是可能的,但我不太确定使用fgets
。如何确保用户输入以13
开头的字符串
printf ( ">>\t\tStudent No. (13XXXX): " );
fgets ( sNum[b], sizeof (sNum), stdin);
编辑:sNum
是学生编号的字符串。
谢谢。使用FGET获取字符串,然后使用sscanf进行解释。格式字符串%i将把该字符串解释为数字。sscanf的返回值将告诉您该解释是否成功(即用户键入一个数字)。一旦你知道了,就把这个数字除以10000。如果结果是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()
,因为它告诉您第一个未转换的字符,您希望该字符作为字符串的终止null。您还可以通过除以10000并检查结果是否为13来验证数字是否为13XXXX。您可能还想看看前6个非空字符后面的内容(在行中剩下的内容),等等
sNum[b]
应该是sNum,它是一个指针
在使用fgets从stdin获得一行代码后,您可以使用以下命令检查该行:“^13.+”
听起来像是在寻找fscanf
intfscanf(文件*流,常量字符*格式,…)代码>你能再给我看一些代码吗?什么是snum?通常你会说fgets(something,sizeof(something),stdin),然后通常检查fgets的返回值。@user814064谢谢你指出这一点。我已经编辑过了。
printf ( ">>\t\tStudent No. (13XXXX): " );
fgets ( sNum[b], sizeof (sNum), stdin);