问题:在完成课后习题的时候,使用fopen()函数以"a+"方式打开一个不存在的文件时,写入、读取出现错误;
 //添加用户输入单词后,在单词头加入编号,确保编号跟着前面的开始排序
#include "stdio.h"
#include "stdlib.h"
#define MAX 40 int main(void){
FILE *fp;
char words[MAX];
int count = ,
temp; if((fp = fopen("words.txt", "a+")) == NULL){
fprintf(stderr, "打开文件\"words\"失败!\n");
exit();
} //从最后一个序号开始继续排序
fseek(fp, 0L, SEEK_SET);
while(){
if(fscanf(fp, "%d", &temp) != )
break;
else
count++;
}
puts("输入单词添加到文件中:");
while(gets(words) != NULL && words[] != '\0'){
fprintf(fp, "%d:%s", count++, words);
} puts("文件内容:");
while(fscanf(fp, "%s", words) == ){
puts(words);
} if(fclose(fp) != ){
fprintf(stderr, "关闭文件失败!\n");
} return ;
}

问题代码

问题应该是出现在fopen()函数以"a+"的方式打开一个不存在的文件而导致的;

以下引用于"C语言中文网"(http://c.biancheng.net/cpp/html/250.html)

“a+"方式:以附加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的EOF符 不保留)。

正常来说代码上应该是没有问题的,因为"a+"方式打开文件可以对文件进行读写的操作,如果文件不存在则进行创建!

后面直接对文件先写入了内容,再运行程序后发现不会出现宕机的情况,但是鉴于程序的原来目的是要在文件不存在的情况下自动创建,那么这个问题我的解决办法是第一次打开文件的时候以"a"的方式打开,写入结束后关闭文件流指针,再重新以"r"的当时打开,避免了该情况的发生。

以上,若有问题希望大家可以指出来。

fopen()函数以"a+"方式打开一个不存在的文件后读写出现问题的更多相关文章

  1. php中fopen函数用法详解(打开文件)

    介绍下php中的fopen函数. 1.resource  fopen(string  $filename, string $mode [,bool $use_include_path [, resou ...

  2. C++->以读或写方式打开一个文件

    以读或写方式打开一个文件 #include<iostream.h>   //.h以C|非C标准引用库文件 #include<fstream.h> #include<std ...

  3. Python3基础 try-指定except-as reason 捕获打开一个不存在的文件的时候,会产生OSError异常的示例

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  4. 当打开一个.h或.cpp文件时, Solution Explorer就自动展开文件所在的目录

    当打开一个.h或.cpp文件时,  Solution Explorer就自动展开文件所在的目录: 如果不想展开: Tools           -> Options           -&g ...

  5. 文件操作之增删改查3---文件的修改,f.replace(),在linux里的一些应用sed,with语句方法来打开一个或多个文件避免忘记关闭,python一行写的太长,怎么编写多行的规范

    f.replace()with open("xxx","r",encoding="utf-8") as f: 想修改文件中间的数据,有两个办 ...

  6. vsto 以隐藏的方式打开一个excel 文件 并获得excel文件的缩略图

    public byte[] GetExcelPictureFile(string filepath) { Workbook workbook=null; Microsoft.Office.Intero ...

  7. VBA 打开一个string指定的文件

    Open csvFileName For Input As #1 Dim lineChanger as String lineChanger = Chr(13) fileData = Split(St ...

  8. win10系统64位安装git后右键运行git bash here生成一个mintty.exe.stackdump文件后闪退解决方案

    在其他win10电脑上复制了一个null.sys文件,替换C:\Windows\System32\drivers\null.sys,搞定.

  9. C语言-一个fopen函数中未使用二进制模式(b)引发的血案

    转自:http://blog.csdn.net/hinyunsin/article/details/6401854 最近写了一个网络文件传输模块,为了让这个模块具有更好的移植性,我尽量使用C标准IO ...

随机推荐

  1. 使用CAShapeLayer绘图

    之前讲过使用UIBezierPath在UIView的drawRect中绘图, 今天我们讲下另外一种方式: CAShaperLayer 先说说使用CAShapeLayer的优点: GPU执行, GPU执 ...

  2. CSS两端对齐

    前面的话   两端对齐在导航条Tab的制作中非常常用.本文将详细介绍CSS两端对齐的3种实现方式 flex   弹性盒模型flex作为强大的弹性布局方式,可以hold住大部分的布局效果,当然也包括两端 ...

  3. 百度地图API的自动定位和搜索功能(移动端)

    近期有个项目涉及到百度地图API,要求做到自动定位和搜索功能.煞费苦心的研究半天,终于能将两个功能合二为一,现将代码贴出来分享给大家,希望你们的砖搬得又快又好.注释不多,具体请参照:http://lb ...

  4. [ios] Xcode使用设置相关-快捷键【转】

    快照:   command+control+s   编辑完了可以和之前的某个版本对比,通过File->Snapshots 调试时的快捷键也像大多数 IDE 靠拢了,采用了 F5.F6.F7 简单 ...

  5. 你真的懂javascript中的 “this” 吗?

    一.前言: 我们知道 "this" 是javascript语言的一个关键字,在编写javascript代码的时候,经常会见到或者用到它. 但是,有一部分开发朋友,对 "t ...

  6. ActiveMQ的简单例子应用

    ActiveMQ是一种消息中间件,它实现了JMS规范,提供点对点和订阅-发布两种模式.下面介绍下ActiveMQ的使用: 一.环境的搭建 首先我们需要下载ActiveMQ的安装包,下载地址http:/ ...

  7. Imagine Cup 微软“创新杯”全球学生科技大赛

    一. 介绍 微软创新杯微博:http://blog.sina.com.cn/u/1733906825 官方站点:https://www.microsoft.com/china/msdn/student ...

  8. [SQL基础教程] 4-1 数据的插入(INSERT)

    [SQL基础教程] C4 数据更新 4-1 数据的插入(INSERT) INSERT INSERT INTO <表名>(列1,列2...) VALUES(值1,值2...); 清单 用() ...

  9. c# base和this在构造函数中的应用

    构造函数可以使用 base 关键字来调用基类的构造函数.例如: public class Manager : Employee{ public Manager(int annualSalary) : ...

  10. C#深复制与浅复制

    C#深复制与浅复制 C#中对于数据的复制机制虽然简单但是容易让人误解.C#数据类型大体分为值类型(value type)与引用类型(reference type).对于值类型数据,复制的时候直接将数据 ...