scanf()可以用来在C中声明一个变量吗?

时间:2014-10-16 16:44:31

标签: c variables declaration scanf

所以,我只有一个简单的代码。我被要求核实它会运行多少次。

int i = 0;
int s = 0;
int b = 0;
while(i < 10){
    printf("Enter an integer: ");
    scanf("%d" ,&x);
    s += x;
    if(x > b){
        b = x;
    }
    i++;

我声明由于 x 未被声明,它永远不会运行。我被告知我错了,它被宣布了。

我的问题是可以scanf()声明一个变量吗?或者你会说这个代码运行的唯一方法是声明 x 吗?

3 个答案:

答案 0 :(得分:4)

x必须声明,你的例子是错误的,但你可以在scanf调用中使用复合文字:

scanf("%d" , &(int){0} ) ;    //(int){0} is a compound literal
                              //and its address is passed to the function

scanf会在该变量中写入一个数字,唯一的问题是你无法访问它,因为你没有它的地址。如果您有一个返回该复合文字地址的函数,则可以使用它。

答案 1 :(得分:2)

在此代码段中,未声明变量x。编译器应发出错误。在scanf &x中是一个参数表达式。它不是声明,也可能不是声明。

如果假设声明了x,那么声明

我++;

有一个右括号,然后循环将重复10次。))

代码的目的似乎是计算10个整数的总和,并找出它们中的最大正整数。

但无论如何这是一个非常糟糕的代码,它不值得讨论。:)

答案 2 :(得分:2)

您是否尝试过运行它以查看会发生什么?

它不会编译,因为x未被声明,并且因为最后缺少一个结束的大括号。