Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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
接受格式化输入:sscanf不忽略空格_C_Scanf_Formatted Input - Fatal编程技术网

接受格式化输入: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从