A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© claud0623 中级黑马   /  2014-7-1 09:12  /  2321 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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

12 个回复

倒序浏览
应该是编译器的问题吧,我用VC++走了下没问题~
回复 使用道具 举报
你提示用于输入正确的数值,是不是应该在while里再使用一次scanf?
回复 使用道具 举报
你用cc或gcc编译的吧?for中声明变量,这是c99才支持的特性,而cc和gcc默认是c89,要加上-std=c99选项
回复 使用道具 举报
我用WINTC编译了一下,没有错误,但是你判断n<=0时的语句是错误的,当输入0时会使程序陷入死循环,应该为if(n<=0)
回复 使用道具 举报
给你看下我写的吧
  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. }
复制代码
回复 使用道具 举报
你这代码在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循环里直接用变量。你那个报错问题应该可以解决的。
回复 使用道具 举报
⒈心只霸占沵 发表于 2014-7-1 09:48
你提示用于输入正确的数值,是不是应该在while里再使用一次scanf?

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

是用CC编译的,我在百度中也搜到要加-std=c99选项,问题是怎么加呢?
回复 使用道具 举报
claud0623 发表于 2014-7-1 10:38
是用CC编译的,我在百度中也搜到要加-std=c99选项,问题是怎么加呢?

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

确实,我的输入0和负数都会死循环,不过在while循环里加一句scanf就能避免了。
回复 使用道具 举报
fantacyleo 发表于 2014-7-1 10:39
cc -std=c99 程序文件名.c

谢谢,编译成功了!
回复 使用道具 举报
长知识了,还有这么个约束
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马