接受格式化输入:sscanf不忽略空格
在从表单用户处获取输入后,我必须找出输入的小时和分钟数:接受格式化输入:sscanf不忽略空格,c,scanf,formatted-input,C,Scanf,Formatted Input,在从表单用户处获取输入后,我必须找出输入的小时和分钟数: ( Number1 : Number2 ) 例:(12:21) 我应该报告12小时21分钟,然后再次等待输入。如果给定的格式不匹配,我应该将其报告为无效输入。我写了这段代码: #include<stdio.h> int main() { int hourInput=0,minutesInput=0; char *buffer = NULL; size_t size; do {
( Number1 : Number2 )
例:(12:21)
我应该报告12小时21分钟,然后再次等待输入。如果给定的格式不匹配,我应该将其报告为无效输入。我写了这段代码:
#include<stdio.h>
int main()
{
int hourInput=0,minutesInput=0;
char *buffer = NULL;
size_t size;
do
{
puts("\nEnter current time : ");
getline ( &buffer, &size, stdin );
if ( 2 == sscanf( buffer, "%d:%d", &hourInput, &minutesInput ) && hourInput >= 0 && hourInput <= 24 && minutesInput >=0 && minutesInput <= 60 )
{
printf("Time is : %d Hours %d Minutes", hourInput, minutesInput );
}
else
{
puts("\nInvalid Input");
}
}
while ( buffer!=NULL && buffer[0] != '\n' );
return 0;
}
#包括
int main()
{
int hourInput=0,minutesInput=0;
char*buffer=NULL;
大小;
做
{
puts(“\n输入当前时间:”);
getline(缓冲区和大小、标准输入);
如果(2==sscanf(buffer,%d:%d),&hourInput,&minutesInput)&&hourInput>=0&&minutesInput避免比较sscanf()
返回值。在您的情况下,它始终取决于用户输入。如果用户在输入之间提供空格,则此值会更改。避免比较sscanf()
返回值。在您的情况下,它始终取决于用户输入。如果用户在输入之间留有空格,则此值会发生变化。我认为,如果在冒号前后放一个空格,它将忽略任何空格,并且在用户不在冒号前后放空格时仍能工作。
像这样:
sscanf( buffer, "%d : %d", &hourInput, &minutesInput )
我认为如果你在冒号前后加一个空格,它将忽略任何空格,并且在冒号前后不加空格的情况下仍然有效。
像这样:
sscanf( buffer, "%d : %d", &hourInput, &minutesInput )
使用“%d:%d”作为格式字符串。它可以使用空格,也可以不使用空格。使用“%d:%d”作为格式字符串。它可以使用空格,也可以不使用空格。第一件事是在使用缓冲区之前分配内存。
第二,这是一个C++
程序还是C
,因为getline
不是C标准
函数
检查这个
int main()
{
int x=0,y=0;
char bff[]="7 8";
sscanf(bff,"%d%d",&x,&y);
printf("%d %d",x,y);
}
o/p-7 8第一件事是在使用缓冲区之前分配内存
第二,这是一个C++
程序还是C
,因为getline
不是C标准
函数
检查这个
int main()
{
int x=0,y=0;
char bff[]="7 8";
sscanf(bff,"%d%d",&x,&y);
printf("%d %d",x,y);
}
o/p-7 8若要在“:”之前允许使用可选空格,请替换
"%d:%d"
与
sscanf()
忽略其格式指令要求其忽略的空格,而不是所有空格。指令中的空格字符(如''
将忽略所有空格。%d
以及其他整数和浮点指令将忽略前导空格。%d
之前的空格是多余的
跳过C11 7,21,6,2,8输入空格字符(由isspace函数指定),除非规范包含[、c或n说明符。)
其他注意事项包括使用%u
和无符号
作为不接受负数的替代方法。strtime()
是用于扫描字符串以获取时间信息的常用函数。要允许在“:”之前使用可选空格,请替换
"%d:%d"
与
sscanf()
忽略其格式指令要求其忽略的空格,而不是所有空格。指令中的空格字符(如''
将忽略所有空格。%d
以及其他整数和浮点指令将忽略前导空格。%d
之前的空格是多余的
跳过C11 7,21,6,2,8输入空格字符(由isspace函数指定),除非规范包含[、c或n说明符。)
其他注意事项包括使用%u
和无符号
作为不接受负数的替代方法。strtime()
是用于扫描字符串以获取时间信息的常用函数。On
SSCANF的返回值-
这些函数返回分配的输入项目数。这可以
是
在匹配失败的情况下,小于规定值,甚至为零-
ure.Zero表示,尽管有可用的输入,但没有转换-
已分配SION;通常这是由于输入字符无效,
例如用于“%d”转换的字母字符。值EOF为
如果在任何转换(如结束)之前发生输入失败,则返回-
如果在转换后发生错误或文件结束,则
开始时,成功完成的转换数为
返回
现在,
如果有人在数字和之间给空格,我的程序会考虑
它被视为无效输入
是的,它应该认为是错误的,因为<代码> sSCANF与%D:%D完全相同的方式从<代码>缓冲区< /代码>中读取,但是如果输入流中的字符与格式字符串冲突,则函数结束,以匹配失败结束。
转换规范之外的字符应与输入流中的字符序列相匹配;输入流中的匹配字符将被扫描,但不会被存储。(请参见粗体句子的重点)
i、 e,sscanf
在写入内存时忽略空白。打开
SSCANF的返回值-
这些函数返回分配的输入项目数。这可以
是
在匹配失败的情况下,小于规定值,甚至为零-
ure.Zero表示,尽管有可用的输入,但没有转换-
已分配SION;通常这是由于输入字符无效,
例如用于“%d”转换的字母字符。值EOF为
如果在任何转换(如结束)之前发生输入失败,则返回-
如果在转换后发生错误或文件结束,则
开始时,成功完成的转换数为
返回
现在,
如果有人在数字和之间给空格,我的程序会考虑
它被视为无效输入
是的,它应该认为它是错误的,因为<代码> sSCANF从