2017-01-31 4 views
-1

Вот мой код:зсапЕ не читает ввод должным образом в с

#include<stdio.h> 
main() 
{ 
    int a,b; 
    float f; 
    scanf("%2d%3d%4f",&a,&b,&f); 
    printf("%d %d %f",a,b,f); 
    return 0; 
} 

Программа Ouput, когда я даю вход (точка только):.

. 
0 1 0.000000 
+3

Неопределенное поведение для использования значения объекта с автоматической продолжительностью хранения, пока она не определена. – EOF

+0

Есть ли какая-либо логика выхода? –

+3

Нет, в отличие от некоторых языков, значения ваших переменных «a», «b» и «f» могут иметь любое значение, поскольку вы не инициализировали их. И 'scanf()' будет сохранять только столько значений, сколько соответствует вводу (в случае «.» Это ни один из них). BTW, scanf возвращает количество совпадений, которые он нашел. –

ответ

2

Если scanf не может извлечь 3 числа при разборе , соответствующие переменные остаются неизменными, т.е. неинициализируются в вашем случае. Доступ к неинициализированным переменным дает неопределенное поведение, которое может быть некоторым индетерминистическим результатом, но теоретически может быть также не выводимым.

В коде есть две вещи: во-первых, инициализирующие переменные; вторых, проверить возвращаемое значение scanf, который обозначает количество элементов, которые были успешно считанных и присвоенных:

#include<stdio.h> 
main() 
{ 
    int a=0,b=0; 
    float f=0.0; 
    int nrOfItemsRead = scanf("%2d%3d%4f",&a,&b,&f); 
    if (nrOfItemsRead == 3) { 
     printf("%d %d %f",a,b,f); 
    } 
    else { 
     printf("wrong input."); 
    } 
    return 0; 
} 

ввода/вывода:

12 34 12.5 
12 34 12.500000 

. 
wrong input.