Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用FGET从键盘扫描格式化输入(字符串)?_C_String_Fgets - Fatal编程技术网

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);