C语言提示读取字符串时出错,但程序能运行出正确结果

C语言提示读取字符串时出错,但程序能运行出正确结果,第1张

scanf_s里面多了一个参数N,删除他,有两个地方

scanf_s("%d%s%f%f%f", &p1->num, p1->name, p1->score, p1->score + 1, p1->score + 2);

在磁盘上读写文件之前,必须先打开这个文件。打开文件就需要提供文件的路径。

在与Python程序同一个目录下,我们有一个名为 pitxt 的文件,它的内容如下:

现在使用Python来打开和关闭它:

执行此程序不会有任何输出,这表示着打开和关闭文件都得到了正确执行。

可以看到,使用 open() 函数打开文件,参数为文件名(或文件路径);该函数会返回一个文件句柄,文件句柄并不会实际保存文件的内容,而是代表着一种 *** 作,在上面的例子中,文件句柄被赋值给变量 fhand 。

打开文件后,程序具有读(默认)该文件的权限。

最后,使用文件句柄的 close() 方法关闭文件。这非常重要,因为使用完而没有关闭的文件会占用内存或造成安全问题。

如果Python找不到该文件,则会返回错误,比如下面这样:

Python提示我们没有相应的文件或者目录: 'piitxt'。

打开文件后就可以对文件进行 *** 作:

fhandread() 方法将文件内容作为一个字符串返回。

文件中的每一行末尾使用换行符 \n 表示换行,例子中方法 rstrip() 去掉文本中的换行符,然后输出。

程序的运行效果如下:

如果在文件关闭之前程序发生BUG意外退出,则文件不会关闭,为了避免此类事件的发生,可以使用 with 语句:

with 语句的特点是即便在 *** 作文件时发生错误,文件也会自动被清理。

fhandread() 虽然可以读取文本内容,但是当我们想要逐行处理文件内容,或者文件很大而无法一次性加载进内存的时候,就不适用了。

可以使用 for 语句逐行处理文件内容:

本程序中将文件名保存在变量 filename 中。

打开文件后,使用 for 语句按行读取文件内容。例子中,每次循环依次取一行文本以字符串的格式保存在变量 line 中,每次循环中变量 count 自增1。

这个程序的作用是,打开程序所在目录的 when_oldtxt 文件,然后统计行数,并输出结果。

when_oldtxt 文件的内容是:

可以使用其他方法 *** 作字符串 line :

程序将以 'And' 开头的行打印出来。

打开文件后,默认的权限是读(r),如果要写文件,则需要使用写(w)或者追加(a)权限。

w权限,打开一个文件用于写入。如果该文件存在,则覆盖该文件;如果该文件不存在,则创建该文件。

a权限,打开一个文件用于追加。如果该文件存在,在文件末尾追加;如果该文件不存在,则创建该文件。

下面是一个使用w权限打开文件的例子:

例子中使用w权限打开该文件,并写入两行。(如果该文件存在,则内容会被覆盖)

fhandwrite() 不会自动添加换行符,所以如果需要换行,需在末尾添加 \n 。

下面我们写一个统计文件中词频的程序。

它会统计文件中各个词的出现的次数,然后由高到低显示出前5个词。

首先我们完成打开和关闭文件的程序内容:

在例子中,由用户输入文件名,并且使用异常捕获以处理文件打开时的错误。

下面对内容进行统计:

这个程序:

如此,我们就在字典中存放了 单词:次数 的键值对。

由于字典不能保存顺序,所以不能对其进行排序。为此,将每个键值对都添加到一个列表中:

在列表 word_list 中,每一项都是一个元组,每个元组第一个值是单词出现的次数,第二个值是单词内容。

对其进行逆向(由大到小)排序:

打印最终结果:

整个程序如下:

下面是程序运行结果的示例:

源程序代码以及算法解释如下:

#define _CRT_SECURE_NO_WARNINGS//VS环境下需要,VC不需要

#include <iostream>

using namespace std;//引用命名空间

void main()

{

const int n = 5;//定义成绩数量

int number[n];//定义存放成绩的数组

int i;//定义循环变量

char Data[256];//定义存文件用的变量

FILE pos;//定义一个文件指针

for (i = 0; i < n; i++)

cin >> number[i];//输入成绩

if (pos = fopen("datatxt", "w+"))//写文件

{

for (i = 0; i < n; i++) //循环写入

sprintf(Data, "%d\n", number[i]);//写入文件成绩

fputs(Data, pos); 

}

fclose(pos);//关闭保存文件

}

else 

cout << "创建文件失败!" << endl;//创建失败

}

程序运行结果如下:

写入过程如下:

文件写入结果:

扩展资料:

C++文件 *** 作代码示例:

#include <fstream>

#include <iostream>

using namespace std;

int main()

{

const char filename = "exampletxt";

char buffer;//buffer是一块内存地址,用来存储或读取数据

long size;//size 是一个整数值,表示要从缓存(buffer)中读出或写入的字符数

ifstream file(filename, ios::in | ios::binary | ios::ate);

size = filetellg();

fileseekg(0, ios::beg);

buffer = new char[size];

fileread(buffer, size);

fileclose();

cout << "the complete file is in a buffer";

delete[] buffer;

return 0;

}

在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据时要使用输入流读取数据,而当程序需要将一些数据保存起来时,就要使用输出流。可以通过下图表示输入和输出的关系。

在javaio中流的 *** 作主要有字节流、字符流两大类,均有输入和输出 *** 作。字节流中输出数据主要使用OutputStream类完成,输入使用的是InputStream类。字符流中输出主要是使用Writer类完成,输入主要是使用Reader类完成。

1字节输出流

字节流主要 *** 作byte类型数据,以byte数组为准,主要 *** 作类是OutputStream类和InputStream类。

OutputStream类是一个抽象类,如果要使用此类,则首先必须通过子类实例化对象。如果现在要 *** 作的是一个文件,则可以使用FileOutputStream类,通过向上转型后,可以为OutputStream实例化。

范例: 向文件中写入字符串

程序运行结果:

内容已成功地写入到文件中,以上程序在实例化、写、关闭时都有异常发生,为了方便起见,直接在主方法上使用throws关键字抛出异常,可以减少trycatch语句。

2追加新内容

在之前的所有 *** 作中,如果重新执行程序,肯定会覆盖文件中的已有内容,此时可以通过FileOutputStream向文件中追加内容,FileOutputStream的另外一个构造方法如下:

如果将append的值设置为true,则表示在文件的末尾追加内容。

范例: 修改之前的程序,追加文件内容

程序运行结果

可以发现,每次执行后,内容会自动追加到文件的末尾。

3字节输入流InputStream

既然可以用程序向文件中写入内容,那么也可以通过InputStream从文件中把内容读取进来。InputStream类和OutputStream类一样本身也是一个抽象类,必须依靠其子类。如果从文件中读取,子类肯定是FileInputStream。

FileInputStream类的构造方法如下:

范例: 从文件中读取内容

程序运行结果:

内容为:Hello World!!!Hello World!!!

文件的内容已经被读取出来,但是后面有很多个空格,这是因为开辟的byte数组大小为1024,而实际的内容只有28个字节,在这之后存在 996个空白的空间,在将byte数组变为字符串时也将这996个无用的空间转为字符串,这样不仅浪费空间,也不合理。可以使用read()方法上的返回值,此返回值表示向数组中写入了多少个数据。

范例: 修正以上错误

程序运行结果:

此时的程序已不再产生多余的空格,因为在程序最后输出时将byte数组指定范围中的内容变成了字符串。

除以上方法外,也可以通过循环从文件中一个个地把内容读取出来,直接使用read()方法即可。

范例: 使用read()通过循环读取

程序运行结果:

以上程序是在明确知道具体数组大小的前提下开展的,如果此时不知道要输入的内容有多大,则只能通过判断是否读到文件末尾的方式来读取文件。能否有根据内容大小自调整的方法?

范例: 另一种方式的读取

程序运行结果:

文件读到末尾,则返回的内容为-1。因此当temp接收到的内容为-1时,输入流的内容也读到底,才会返回-1,通过-1可以判断输入流中是否还有其他内容。

以上就是关于C语言提示读取字符串时出错,但程序能运行出正确结果全部的内容,包括:C语言提示读取字符串时出错,但程序能运行出正确结果、python *** 作文本文件、编写一个程序:要求输入5个学生的成绩(从0到100的整数),并将这5个数保存到"data.txt"等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10634108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存