2014-10-16 73 views
-3

所以,我只是有一个简单的代码。我被要求验证它会运行多少次。scanf()可以用来在C中声明一个变量吗?

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被声明?

+2

这段代码显然是不完整的;除了别的以外,'while'循环的终止'}缺失,所以在增加'i'之后,谁知道它是什么。要么你在切割和粘贴时犯了错误,要么你给了你一个错误。所以在原始代码中声明'x'完全可能,尽管你不知道它。说了这么多,循环取决于'我'的价值;说明循环中'i'如何更新,并且您有答案。 – 2014-10-16 16:57:47

回答

2

在这段代码片段变量x没有声明。编译器应该发出一个错误。在scanf&x是一个参数表达式。这不是一个声明,可能不是一个声明。

如果假设x已被声明,并且声明后

i ++;

有一个右括号,则循环将iteratated 10倍。:)

看来,代码的目的是计算的10个整数的总和,并找到它们之间的maximim正整数。

但在任何情况下,这是一个非常糟糕的代码,它不值得讨论。:)

+0

不同意:“不好的代码,它不值得被讨论”SO不是那么多的代码工作,但代码是坏的。 – chux 2014-10-16 17:01:19

+0

@chux除了说它是一个不好的代码之外,没有什么可讨论的。 – 2014-10-16 17:03:56

1

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

它不会编译,因为x没有被声明,并且因为最后没有关闭大括号。

+1

是的,我跑了,我得到了错误x没有声明,然后警告s没有使用。我期待这一点,但有人说它会起作用。 – FrustratedStudent 2014-10-16 16:55:10

3

x必须声明,你的例子是错误的,但你可以使用复合字面常量scanf函数调用内部:

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

和scanf会写一个数字,该变量,唯一的问题是,你不能访问它因为你没有地址。如果你有一个返回该复合文字地址的函数,你可以使用它。

相关问题