问题:在完成课后习题的时候,使用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. 设置RichEdit相关颜色说明

    1.设置RichEdit客户区的背景颜色 要设置RichEdit的背景色,需要发送 EM_SETBKGNDCOLOR 消息给RichEdit控件,关于该消息的说明:wParam参数 为颜色选项,如果是 ...

  2. javascript深入之location对象和history对象

    浏览器的location 和history对象: 一.location对象: 1>location.reload() 相当于按浏览器上的“刷新”(IE)或“Reload”(Netscape)键. ...

  3. Js 获取当前月的天数

    function getDays() { //构造当前日期对象 var date = new Date(); //获取年份 var year = date.getFullYear(); //获取当前月 ...

  4. 深入理解HTTP Session

    深入理解HTTP Session   session在web开发中是一个非常重要的概念,这个概念很抽象,很难定义,也是最让人迷惑的一个名词,也是最多被滥用的名字之一,在不同的场合,session一次的 ...

  5. 最新samba.tar.gz安装方法

    看了韩顺平老师的samba.rpm包安装后,想自己也动手试试,便在samba官网找啊找,只找到一个tar.gz包,于是开始了这一段漫长的跨时两天的安装旅途... 1.首先,看看系统是否已经安装了sam ...

  6. Chrome使用小技巧-多用户登录、直接打开隐身模式窗口

    在开发过程中,有时候需要打开2个chrome,各自登录一个账号来做测试,正常情况下由于同一用户下的chrome共享cookies的原因,是没办法登录2个账号的. 这种情况,可以找到chrome图标,点 ...

  7. HDU1496 hash

    Equations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. 【CodeVS】1293

    输入输出样例 思路:看到题目我萌第一眼想到的肯定是求联通快对吧,但是这个联通快有点奇特,因为 这样他也算是一个联通快.解决此题其实有三种解法:1)宽搜(这个符合基本法):2)并查集:3)灌水法 但是蒟 ...

  9. Spark Wordcount

    1.Wordcount.scala(本地模式) package com.Mars.spark import org.apache.spark.{SparkConf, SparkContext} /** ...

  10. equals和hashcode为什么要一起重写

    equals()方法与hashCode()的通用协定是:2.1 如果两个对象相等(equal),那么必须拥有相同的哈希码(hash code)2.2 即使两个对象有相同的哈希值(hash code), ...