2017-01-31 74 views
-1

这里正确读取输入的是我的代码:scanf函数不是在C

#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; 
} 

程序输出中的时候,我给输入(仅点):

. 
0 1 0.000000 
+3

未定义行为用于使用对象的值自动存储时间不确定。 – EOF

+0

输出后面是否有逻辑? –

+3

不,与某些语言不同,变量'a','b'和'f'的值可以具有任何值,因为您没有初始化它们。而'scanf()'只会保存与输入相匹配的值(在'。'的情况下它们都不是)。顺便说一句,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.