sscanf: не верю глазам своим!
От: Silver\/\/olf  
Дата: 14.11.01 00:07
Оценка:
Объясните, пожалуйста, почему данная программа не работает, как надо:

#include<stdio.h>
int main(int argc, char* argv[])
{
    double test = 0;
    char *pszTest = "100.000000";
    sscanf(pszTest, "%10.6f", &test);
    printf("%10.6f", test);
    return 0;
}

На экран выводится " 0.000000". Полный бред... Может, я сплю и вижу страшный сон? :(
Re: sscanf: не верю глазам своим!
От: Андрей Тарасевич Беларусь  
Дата: 14.11.01 00:45
Оценка:
Здравствуйте Silver\/\/olf, Вы писали:

S\/\/>Объясните, пожалуйста, почему данная программа не работает, как надо:

S\/\/>
#include<stdio.h>
S\/\/>int main(int argc, char* argv[])
S\/\/>{
S\/\/>    double test = 0;
S\/\/>    char *pszTest = "100.000000";
S\/\/>    sscanf(pszTest, "%10.6f", &test);
S\/\/>    printf("%10.6f", test);
S\/\/>    return 0;
S\/\/>}

S\/\/>На экран выводится " 0.000000". Полный бред... Может, я сплю и вижу страшный сон? :(

А что это за спецификация формата у твоего 'sscanf' такая странная: "%10.6f" ??? Посмотри внимательнее спецификации формата для 'sscanf' и перепиши правильно.
Best regards,
Андрей Тарасевич
Re: sscanf: не верю глазам своим!
От: Alex Fedotov США  
Дата: 14.11.01 00:54
Оценка:
Здравствуйте Silver\/\/olf, Вы писали:

S\/\/>Объясните, пожалуйста, почему данная программа не работает, как надо:

S\/\/>#include<stdio.h>
S\/\/>int main(int argc, char* argv[])
S\/\/>{
S\/\/>    double test = 0;
S\/\/>    char *pszTest = "100.000000";
S\/\/>    sscanf(pszTest, "%10.6f", &test);
S\/\/>    printf("%10.6f", test);
S\/\/>    return 0;
S\/\/>}

S\/\/>На экран выводится " 0.000000". Полный бред... Может, я сплю и вижу страшный сон? :(

1. scanf не понимает %m.n, только %m.
2. спецификатор формата f соответсвует аргументу типа float, если хочешь double, надо указывать lf


Вот так будет работать

double test = 0;
char *pszTest = "100.000000";
sscanf(pszTest, "%10lf", &test);
-- Alex Fedotov
Re: sscanf: не верю глазам своим!
От: IT Россия linq2db.com
Дата: 14.11.01 00:55
Оценка:
Здравствуйте Silver\/\/olf, Вы писали:

S\/\/>На экран выводится " 0.000000". Полный бред... Может, я сплю и вижу страшный сон? :(

А где написано, что scanf должен как-то понимать цифры после '%'?
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: sscanf: не верю глазам своим!
От: adontz Грузия http://adontz.wordpress.com/
Дата: 14.11.01 07:00
Оценка:
Здравствуйте IT, Вы писали:
IT>А где написано, что scanf должен как-то понимать цифры после '%'?

А нигде это printf их понимает :-)
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: sscanf: не верю глазам своим!
От: adontz Грузия http://adontz.wordpress.com/
Дата: 14.11.01 07:31
Оценка:
Здравствуйте adontz, Вы писали:

%
  • [width] [{h | l | I64 | L}]type

    width is a positive decimal integer controlling the maximum number of characters to be read from stdin. No more than width characters are converted and stored at the corresponding argument.
    То есть к реальному виду числа отношения не имеет.
    To Specify Use Prefix With Type Specifier 
    double     l          e, E, f, g, or G 
    [code]
    То есть l нужен
    
    e, E, f, g, G Floating-point value consisting of optional sign (+ or –), series of one or more decimal digits containing decimal point, and optional exponent (“e” or “E”) followed by an optionally signed integer value. 
    
    здесь простой f подойдёт
    
    Вот правильный код:
    [code]
    int main(int argc, char* argv[])
    {
       double test = 0;
       char *pszTest = "100.000000";
       sscanf(pszTest, "%lf", &test);
       printf("%10.6f", test);
       return 0;
    }
  • A journey of a thousand miles must begin with a single step © Lau Tsu
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.