错误:在 C99 模式之外使用‘for’循环初始化声明

[email protected]:~/BeginningC/chapter12> gcc Program12.1.c -o Program12.1
Program12.1.c: 在函数‘main’中:
Program12.1.c:24: 错误:在 C99 模式之外使用‘for’循环初始化声明

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

const int LENGTH = 80;

int main(void)
{
    char mystr[LENGTH];
    int lstr = 0;
    int mychar = 0;
    FILE *pfile = NULL;
    char *filename = "myfile.txt";
    printf("n\Enter an intersting string of less than 80 characters:\n");
    fgets(mystr, LENGTH, stdin);

    if (!(pfile = fopen(filename, "w")))
    {
        printf("Error opening %s for writing.", filename);
        exit(1);
    }

    lstr = strlen(mystr);
    for (int i = lstr - 1; i >= 0; i--)
    {
        fputc(mystr[i], pfile);
    }
    fclose(pfile);

    if (!(pfile = fopen(filename, "r")))
    {
        printf("Error opening %s for reading.", filename);
        exit(2);
    }

    while ((mychar = fgetc(pfile)) != EOF)
        putchar(mychar);
    putchar(‘\n‘);

    fclose(pfile);
    return 0;

}

错误处理:

C99 允许在for语句的 “表达式1 ”中定义并初始变量, gcc4 编译c语言的默认标准是C89, 编译C99程序需加参数 “–-std=c99” ;使用

gcc Program12.1.c -o Program12.1 --std=c99就解决了。

时间: 2024-11-01 21:36:09

错误:在 C99 模式之外使用‘for’循环初始化声明的相关文章

从良品铺子看传统零售自救 商业模式之外 O2O更该是思维方式

很长一段时间以来,O2O都被传统零售业当做治愈线下零售阵痛的灵丹妙药,有太多的零售商趋之若鹜的高举O2O大旗,结果搞来搞去也没弄清楚究竟该如何O2O.这其中问题主要出在对O2O的理解上,很多企业五迷三道的信奉O2O模式,而实际上O2O更应该是一种思维方式. 商业模式之外 O2O更该是思维方式 不妨先想下你对O2O模式的认知或是对其做个定义,线上线下融合?这恐怕不叫模式吧,最多算是O2O概念的释义.回想一下,如今所谓的O2O模式,没有上百也有几十,零售O2O.餐饮O2O.家政O2O.社区O2O.汽

c#变量在for循环内声明与外的区别

1.这样写是错误的 #region 有这样的一个字符串类型的数组{"老杨","老苏","老马","老牛"};要求 变换成这样一个字符串:老杨|老苏|老马|老牛 string[] str = { "老杨", "老苏", "老马", "老牛" }; for (int i = 0; i < str.Length - 1; i++) { string

关于安卓启动eclipse错误:找不到元素‘d:devices&#39;的声明

可以把C:\Documents and Settings\Administrator\.android\devices.xml这个文件删除, 再把sdk里面tools\lib下的这个文件拷贝到你删除的那个文件夹里,重启eclipse就好了 关于安卓启动eclipse错误:找不到元素'd:devices'的声明

关于嵌套循环的循环初始化语句问题:

题目:使用嵌套循环计算1!+2!+3!+...+100! 关于循环初始化:自己起初认为变量循环初始化在外层循环外面和里面没有什么区别,就将其放在了外层循环里面.侥幸运行正常. 而书里提到这个循环初始化语句放在不同位置会产生不同结果,如图,当将sum和item放在外层循环外时,计算结果是:1!+1!*2!+...+1!*2!*3!*...*100!.显然不是题目想要的结果. 出错原因是:循环初始化语句放错位置了. 避错:在进行嵌套语句初始化时要分清外层循环初始化与内层循环初始化. 原文地址:htt

ef core code first 模式提示&quot;可能会导致循环或多重级联路径&quot;问题

执行命令 dotnet ef mirations add "xxxxxx" dotnet ef database update 报错 将 FOREIGN KEY 约束 'FK_SkuPropertyItem_Sku_SkuId' 引入表 'SkuPropertyItem' 可能会导致循环或多重级联路径.请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束.无法创建约束.请参阅前面的错误消息 修改项目定义的d

for循环变量声明为 final

防止在循环体里修改循环变量 在默认情况下,编译器是允许在第二种for循环的循环体里,对循环变量重新赋值的.不过,因为这种做法对循环体外面的情况丝毫没有影响,又容易造成理解代码时的困难,所以一般并不推荐使用. Java提供了一种机制,可以在编译期间就把这样的操作封杀.具体的方法,是在循环变量类型前面加上一个“final”修饰符.这样一来,在循环体 里对循环变量进行赋值,就会导致一个编译错误.借助这一机制,就可以有效的杜绝有意或无意的进行“在循环体里修改循环变量”的操作了. for (final M

Spark- Spark Yarn模式下跑yarn-client无法初始化SparkConext,Over usage of virtual memory

在spark yarn模式下跑yarn-client时出现无法初始化SparkContext错误. 17/09/27 16:17:54 INFO mapreduce.Job: Task Id : attempt_1428293579539_0001_m_000003_0, Status : FAILED Container [pid=7847,containerID=container_1428293579539_0001_01_000005] is running beyond virtual

Javascript中的循环变量声明,到底应该放在哪儿?

不放走任何一个细节.相信很多Javascript开发者都在声明循环变量时犹豫过var i到底应该放在哪里:放在不同的位置会对程序的运行产生怎样的影响?哪一种方式符合Javascript的语言规范?哪一种方式和ecma标准未来的发展方向匹配?本文将对四种常见的声明循环变量的书写方式进行简单的分析和比较. 习惯1:不声明直接使用 function loop(arr) { for (i = 0; i < arr.length; i++) { // do something } } 非常危险的使用习惯,

libev 默认事件循环初始化的解析

libev第一次进入的是默认的事件循环,这里将源码中执行的默认循环流程解析一下,要进入事件循环,如下例子 int main (void) { // use the default event loop unless you have special needs struct ev_loop *loop = EV_DEFAULT; // initialise an io watcher, then start it // this one will watch for stdin to becom