4

"私のデータベースは、区切り式の開始と終了を含むテキストファイルを提供しています。数式のセットは非常に限られているため、特定できれば簡単に実装できます。scanf を使用してパラメーターを取得しようとしていますが、区切り文字を使用し"て scanf が失敗するメカニズムを提供したいと考えています。

以下の例では、最後の区切り文字が無視され、区切り文字が見つからなかったという情報が失われます。sscanf が文字列全体に一致するかどうかを制御するにはどうすればよいですか?

#include <stdio.h>
#include <string.h>

unsigned printIdentity(const char * formula){
    unsigned e = 0, found = 0;
    double a, b;
    printf("-------------\n");
    printf("INVESTIGATING: %s\n", formula);
    if( ( 2 == sscanf_s( formula, " \" X * %lf %lf \" ", &a, &b, sizeof( double ), sizeof( double ) ) ) ){
        printf("MATCH: X * %lf + %lf\n", a, b);
        ++found;
    }
    if( ( 1 == sscanf_s( formula, " \" X * %lf \" ", &a, sizeof( double ) ) ) ){
        printf("MATCH: X * %lf\n", a);
        ++found;
    }
    if( found != 1){
        e += 1;
        printf("ERROR: %u formula types\n", found);
    }
    printf("-------------\n");
    return e;
}

unsigned main( void )
{
    unsigned e = 0;

    e += printIdentity("     \"X*3.1\"");
    e += printIdentity("     \"X*3.2-4.2\"");
    e += printIdentity("     \"X*3.3+4.3\"");

    if( 0 != e ){ printf( "ERRORS: %2u\n", e ); }
    else{ printf( "all pass\n", e ); }
    return e;
}
4

1 に答える 1