我正在考虑循环终止它是停止循环还是实际的故事

时间:2015-10-02 14:33:27

标签: c

Int i,num=10;

For(i=1;i<=num;i++);

{

Printf("%d",i);

}

什么是输出,为什么输出只是单个数字?

4 个答案:

答案 0 :(得分:3)

您需要将代码放在for块中。删除分号

For(i=1;i<=num;i++)

{
// code here
}

答案 1 :(得分:2)

我想强调一下,让你明白发生了什么,而不是标记你并评论这个问题。

int i,num=10;

for(i=1;i<=num;i++);
{
    printf("%d",i);
}

&#39;;&#39;的目的 - &GT;半冒号是终止声明。因此,当您在for循环结束时使用它时,您的代码变为如下。然后它将printf视为一个单独的语句,并执行它而不管for循环。

for(i=1;i<=num;i++)
    ;

{
    printf("%d",i);
}

回到for循环,它运行10次,并将i的值从1增加到10,当它为11时断开。循环不做任何事情,因为我们立即有分号。一旦循环结束,它将返回到printf并显示i的最新值11。此外,您不会放置&#39;&amp;&#39;在我打印之前。一个&#39;&amp;&#39;在C&#39;中的变量之前用于指代其地址,当您输入值并将其存储在变量的地址中时,仅在scanf中使用它。

我认为你是一个初学者,虽然很多人已经投了票,我之所以解释它是因为我花了一年多的时间来理解当我放置一个&#39 ;;&#39;在for循环结束时。

答案 2 :(得分:0)

这个数字不是一个数字,实际上所有的数字输出都是一起显示的,它们之间没有任何空格。你应该用“\ n”分别显示每个输出到下一行。还要删除那个&符号(&amp; ;)来自“printf”,因为它显示的是内存地址而不是实际的数字。在for循环语句中也不应使用分号。这是对代码的更正 -

int i,num=10;
for(i=1;i<=num;i++){
printf("%d\n",i);
}

答案 3 :(得分:0)

代码的几乎每一行都至少有一个错误。

我将假设您仅引用了main()的正文,并且您实际上只引用了#include <stdio.h>的顶部。

Int i,num=10;

C区分大小写:Intint不同。编译器应该说类似

test.c:3:3: error: use of undeclared identifier 'Int'; did you mean 'int'?
For(i=1;i<=num;i++);

同样,Forfor不同。这将被解释为一个名为For的函数的函数调用,您没有费心去声明。由于你不能在函数调用表达式中加入分号,你应该得到一整套错误消息:

test.c:4:3: warning: implicit declaration of function 'For' is invalid in C99
test.c:4:10: error: expected ')'
test.c:4:6: note: to match this '('
test.c:4:21: error: extraneous ')' before ';'

For更正为for会发现另一个问题,我认为这是您最初提出的问题。

test.c:4:22: warning: for loop has empty body
test.c:4:22: note: put the semicolon on a separate line to silence this warning

通过在循环标题的末尾加一个分号,你使 成为循环的主体。之后的括号块只执行一次。 (C允许括号块出现在常规语句出现的任何地方。这很少有用。)

Printf("%d",&i);

同样,Printfprintf不同。

test.c:6:3: warning: implicit declaration of function 'Printf' is invalid in C99

但这不是唯一的问题:您正在尝试打印变量i,但是您传递了printf 地址 i

test.c:6:15: warning: format specifies type 'int' but the argument has type 'int *'

正确的调用将是printf("%d", i);(您也可能希望在该格式字符串中使用\n)。我怀疑你对printfscanf之间的不对称感到困惑。在大多数情况下,你必须将每个参数的地址都带到printf,而在大多数情况下你必须将每个参数的地址带到scanf,因为scanf需要这些变量。最好忘记scanf存在,因为it should never be used,但理解这种差异仍然很重要,因为每次 C函数需要模拟输出参数时它会出现

clang模式下来自-std=c99 -W -Wall -pedantic(“Apple LLVM版本7.0.0”;我不知道哪个版本的上游LLVM对应)的所有错误消息。您应该自己使用该模式。 (GCC接受相同的命令行选项。我不知道MSVC的等价物是什么。)