为什么这个简单的代码与printf“冻结”?

时间:2011-10-22 19:02:05

标签: c

当我运行此代码时程序会冻结,为什么?

main()
{
int co;
    co=0;
    while (co<10) {

        co=co+1;

        if (co==3)
            printf("The number is now three.");
        if (co==7)
            printf("The number is now seven.");
        else
            printf(co);

}
}

我正在使用mingw GCC进行编译。

5 个答案:

答案 0 :(得分:8)

你不能像那样打印co

你需要这样做:

printf("%d",co);

printf作为第一个参数,一个带格式说明符的字符串。后者(可选)参数是参数本身。

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

这是一个更清洁的代码版本:

int main(){

    int co = 0;
    while (co < 10) {

        co = co + 1;

        if (co == 3)
            printf("The number is now three.");
        if (co == 7)
            printf("The number is now seven.");
        else
            printf("%d\n",co);
    }

    return 0;
}

答案 1 :(得分:4)

你没有打电话给printf(co)printf()期望一个共振峰字符串+一些可选参数:

printf("%d\n", co);

(另外,您应该在1989年之后编写的每个C程序中明确指定int作为main()的返回类型,并在return内提供main值<) / p>

答案 2 :(得分:3)

我建议使用警告启用进行编译。然后你会直接看到你做错了什么。

答案 3 :(得分:0)

正如其他答案所述,您需要使用格式字符串(百分比)来打印它。对于整数,您可以在格式字符串中使用%i或%d。

printf("%d", co);

如果你想打印更复杂的东西,你可以这样做。

int a = 5;
int b = 2;
printf("%d+%d=%d", a, b, (a+b));

printf函数接受可变数量的参数,因此您可以将尽可能多的字符串,整数或其他内容传递给函数调用。

另外,我建议改变co = co + 1;在你的代码中。

++co;

简单地说,这会增加co变量。您也可以使用co ++,但这取决于您的个人偏好。

答案 4 :(得分:0)

我只想添加一些内容并向您展示编写代码的另一种方式:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int co;

   for (co = 0; co < 10; co++) {
      if (co == 3)
         printf("The number is now three.\n");
      else if (co == 7)
         printf("The number is now seven.\n");
      else
         printf("%d\n", co);

   }

   return EXIT_SUCCESS;
}

co <​​/ em>的初始值,条件和修改它的指令(增量)的方式使其非常适合使用 for 语句,如你可以整齐地将这三个部分放在一行中。

此外,我认为您希望if (co == 7)else if (co == 7),因此当您到达数字3时,您不会打印“数字现在为3。 “以及3号。

显然,我知道已经回答的问题的主要答案是 printf co <​​/ em>的值视为开头的地址字符串,因为 printf 的第一个参数是格式字符串