黑马程序员技术交流社区

标题: 用C语言编写的乘法表编译时出错 [打印本页]

作者: claud0623    时间: 2014-7-1 09:12
标题: 用C语言编写的乘法表编译时出错
本帖最后由 claud0623 于 2014-7-1 22:01 编辑

昨天用C语言敲的一个关于乘法表的代码,我的意思是输入n就生成关于n的乘法表,查了一下代码没什么问题,但就是编译出错。
哪位大神可以帮我看一下改怎么改才能成功编译呢?源码如下:
#include <stdio.h>
int main()
{   
    int n=0;
    printf("请输入一个正整数:");
    scanf("%d",&n);//接收输入的值
    while(n <=0)
    {
        printf("您输入的数字非法");//提醒用户输入正确的数值
    }
    for(int i=1;i<=n;i++)//输入的行数
    {
        for(int j=1,product=1;j<=i;j++)//输入的列数
        {
            product=i*j;
            printf("%dX%d=%d ",i,j,product);
        }
        printf("\n");
    }
    return 0;
}

编译后报如下的错误:
乘法表.c: In function ‘main’:
乘法表.c:11: error: ‘for’ loop initial declaration used outside C99 mode
乘法表.c:13: error: ‘for’ loop initial declaration used outside C99 mode


作者: yueyuanlin    时间: 2014-7-1 09:31
应该是编译器的问题吧,我用VC++走了下没问题~
作者: ⒈心只霸占沵    时间: 2014-7-1 09:48
你提示用于输入正确的数值,是不是应该在while里再使用一次scanf?
作者: fantacyleo    时间: 2014-7-1 09:49
你用cc或gcc编译的吧?for中声明变量,这是c99才支持的特性,而cc和gcc默认是c89,要加上-std=c99选项
作者: zhs    时间: 2014-7-1 09:51
我用WINTC编译了一下,没有错误,但是你判断n<=0时的语句是错误的,当输入0时会使程序陷入死循环,应该为if(n<=0)
作者: 小海    时间: 2014-7-1 10:04
给你看下我写的吧
  1. #include <stdio.h>

  2. //定义一个函数;打印99乘法表
  3. int chengfabiao()
  4. {
  5.     for (int i=1; i<=9; i++) {
  6.         for (int j=1; j<=i; j++) {
  7.             printf("%d*%d = %d\t",j,i,i*j);
  8.         }
  9.         printf("\n");

  10.     }

  11.     return 0;
  12. }
  13. //主函数
  14. int main()
  15. {
  16.     chengfabiao();
  17.     return 0;
  18. }
复制代码

作者: rocki    时间: 2014-7-1 10:34
你这代码在X-code中编译通过的。楼上几楼答案正解。问题出在你再FOR中声明变量。并且输入0会进入死循环。
给你修改了代码。这个不会陷入死循环。 #include <stdio.h>
int main()
{
    int n=0;
    /*
     int i=1,j=1,product=1;
    */
   
    while(n <=0)
    {
        printf("请输入一个大于0小于10的正整数:\n");
        scanf("%d",&n);//接收输入的值
        printf("您输入的数字非法\n");//提醒用户输入正确的数值
    }
    for(int i=1;i<=n;i++)//输入的行数
    {
        for(int j=1,product=1;j<=i;j++)//输入的列数
        {
            product=i*j;
            printf("%dX%d=%d ",i,j,product);
        }
        printf("\n");
    }
    return 0;
}
你把上面注释掉得声明恢复了。然后FOR循环里直接用变量。你那个报错问题应该可以解决的。
作者: claud0623    时间: 2014-7-1 10:37
⒈心只霸占沵 发表于 2014-7-1 09:48
你提示用于输入正确的数值,是不是应该在while里再使用一次scanf?

确实是,如果编译成功,那么这就是下一个需要改的地方。
作者: claud0623    时间: 2014-7-1 10:38
fantacyleo 发表于 2014-7-1 09:49
你用cc或gcc编译的吧?for中声明变量,这是c99才支持的特性,而cc和gcc默认是c89,要加上-std=c99选项 ...

是用CC编译的,我在百度中也搜到要加-std=c99选项,问题是怎么加呢?
作者: fantacyleo    时间: 2014-7-1 10:39
claud0623 发表于 2014-7-1 10:38
是用CC编译的,我在百度中也搜到要加-std=c99选项,问题是怎么加呢?

cc -std=c99 程序文件名.c
作者: claud0623    时间: 2014-7-1 11:42
rocki 发表于 2014-7-1 10:34
你这代码在X-code中编译通过的。楼上几楼答案正解。问题出在你再FOR中声明变量。并且输入0会进入死循环。
...

确实,我的输入0和负数都会死循环,不过在while循环里加一句scanf就能避免了。
作者: claud0623    时间: 2014-7-1 11:45
fantacyleo 发表于 2014-7-1 10:39
cc -std=c99 程序文件名.c

谢谢,编译成功了!
作者: 我是一只小小强    时间: 2014-7-1 12:25
长知识了,还有这么个约束




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2