这个程序中的 fread 有什么问题吗?

2023-12-07

我是 C 语言的中级学生。我正在尝试制作一个银行管理程序,但首先我需要制作一个登录程序,所以我创建了以下程序之一。由于我最近了解了C中的文件I/O,并且对fread和fwrite不太了解。我有一个文件(data.txt),其格式如下。

用户1 1124

用户2 3215

用户3 5431

在下面的程序中,我要求用户输入用户名和 pin(4 位密码)并将文件数据复制到结构中,然后比较这两者以验证信息。

我的程序有什么问题以及如何使 fread 正常工作。 data.txt 文件中的格式是否正确,或者我应该更改它。

提前致谢...

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

struct user_account    {
    char u_name[30];
    int u_pin;
} log_in;



    int login()
{
    int start;
    int i, n;
    int t_pin[4];       // TEMPORARY INT PIN for storing pin inputed by user
    char t_name[30];    //  TEMPORARY STRING for storing name inputed by user

    FILE *fp;
    fp = fopen("data.txt","rb");        // Opening record file

    if(fp == NULL)
    {
    puts("Unable to open file!");
    return 1;
    }

    start :  {
        printf("User Name : ");
        scanf("%s",&t_name);
        printf("Pin Code  : ");

        for(i = 0; i < 4; i++)  {       // This loop is for hiding input pin
            n = getch();

            if(isdigit(n))  {
                t_pin[i] = n;
                printf("*");    }
            else    {
                printf("\b");
                i--;
            }
        }

        fread(&log_in,sizeof(log_in),1,fp);

        // Comparing user name and pin with info in the structure copied from the file

        if(strcmp(log_in.u_name, t_name) == 0 && log_in.u_pin == t_pin)
            puts("Login successful! Welcome User");
        else    {
            printf("\nIncorrect Information!\n");
            printf("Press any key to log in again...");
            getch();
            system("cls");
            goto start; }
        }
    }

    int main()
    {
    int login();
        return 0;
    }

问题是您有一个 ASCII/文本文件,但您正在尝试使用fread直接读入结构;这需要一个二进制格式的文件。fread无法进行格式转换。使用fscanf反而:

fscanf(fp, "%s %d", &log_in.u_name, &log_in.u_pin);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这个程序中的 fread 有什么问题吗? 的相关文章

  • 通过 VLA 数组跳转到 goto 时出现分段错误

    以下示例演示了该问题 include
  • 使用来自本地对象的消息的 std::Exception

    以下代码是否可以安全地抛出带有自定义消息的异常 include
  • C# 中的 Culture 相当于 Java 中的 Locale 吗?

    C 使用文化的概念 这在操作上与 Java 中的 Locale 类似吗 或者底层概念是否存在显着差异 从文化而不是语言环境的角度进行工作是一种寻找正确抽象层次的尝试 从以类似方式做事的人群的角度来考虑事物 而不是谈论地理区域和语言 并有点疯
  • HttpResponseMessage 的内容为 JSON

    我有一个 ASP NET MVC WEB API 由于多种原因 由于没有授权而重定向 我不能只使用一个简单的对象并在我的控制器方法中返回它 因此我需要 HttpResponseMessage 类来允许我重定向 目前我正在这样做 var re
  • 无法在更新面板中找到上传的文件

    aspx
  • 将内核链接到 PTX 函数

    我可以使用 PTX 文件中包含的 PTX 函数作为外部设备函数 将其链接到另一个应调用该函数的 cu 文件吗 这是另一个问题CUDA 将内核链接在一起 https stackoverflow com questions 20636800 c
  • NUnit 测试运行顺序

    默认情况下 nunit 测试按字母顺序运行 有谁知道有什么方法可以设置执行顺序吗 是否存在这样的属性 我只是想指出 虽然大多数受访者认为这些是单元测试 但问题并没有具体说明它们是 nUnit 是一个很棒的工具 可用于各种测试情况 我可以看到
  • 优化对绑定到 DataGridView 的 DataTable 的更新

    我的应用程序中有一个显示一些数据的表单 当我第一次显示表单时 我将一些数据加载到 DataTable 中 然后将 DataTable 绑定到 DataGridView 我还启动了一个异步方法来执行一些较慢的数据库查询 当这些慢查询完成时 我
  • 使用 boost::iterator_facade<>

    我有一个链表结构 struct SomeLinkedList const char bar int lots of interesting stuff in here DWORD foo SomeLinkedList pNext 它是现有
  • CMake - 未定义参考

    我正在尝试将 gtest 包含到我的项目中 问题是我在 GTest 中收到未定义的引用错误 我正在尝试在 Gtest 中测试 Node 类 在节点的构造函数中 我使用类记录器 尽管我已将库记录器添加到 gtest target 中 但我仍然
  • 设置外部应用程序焦点

    在 VB NET 中 您可以使用以下命令将焦点设置到外部应用程序 AppActivate Windows Name or AppActivate processID As Integer 现在 如果您这样做 则效果很好 Dim intNot
  • ResourceDictionary 源中的 Uri 语法(通用 Windows 平台)

    我正在迁移我的Windows 8 1项目到Windows 10 通用 Windows 平台 这时我被拦住了ResourceDictionary改变在UWP 为了简单起见 我有包含 2 个项目的 Windows 8 1 解决方案 App pr
  • F# 内联如何工作?

    对于 F 我的理解是您可以使用 inline 关键字在调用站点执行类型专门化 那是 val inline a gt b gt c when a or b static member a b gt c 约束条件是 a or b必须有一个静态成
  • 在 DefaultHttpContext 上使用 FeatureCollection 时,响应对象为 null

    我正在测试一些 net Core 中间件 并希望使用整个 asp net Core http 管道来运行中间件 而不是模拟它 问题是 当我使用特征集合时 不知何故 响应对象没有在 httpRequest 中设置 并且它在请求本身上是只读的
  • 没有真正理解 std::atomic::compare_exchange_weak 和compare_exchange_strong 的逻辑

    我读了https en cppreference com w cpp atomic atomic compare exchange https en cppreference com w cpp atomic atomic compare
  • 使用成员函数作为 std::shared_ptr 的自定义删除器时出现问题

    我正在尝试弄清楚如何将 std shared ptr 与自定义删除器一起使用 具体来说 我将其与 SDL Surface 一起使用 如下所示 std shared ptr
  • 最小对的总和

    Given 2N点 in a 2D plane 你必须将它们分组为N pairs使得所有对的点之间的距离的总和是最小可能值 所需的输出只是总和 换句话说 如果a1 a2 an分别是第一对 第二对 和第 n 对点之间的距离 则 a1 a2 a
  • 在发送传出请求之前将新的 SoapClient 绑定到特定 IP 地址

    假设应用程序所在的计算机具有 SoapClient 具体来说 我正在使用 Microsoft Web Service3 Messaging SoapClient 它通过发送传出请求并获取 SoapEnvelope 作为回报 完善的流程 与远
  • Azure Function App Azure 服务总线触发器触发两次

    我使用带有服务总线触发器的 Azure Function Apps 来读取服务总线并对服务总线消息的内容执行操作 服务总线接收 JSON 序列化对象 然后将 JSON 消息反序列化回 Function App 中的对象 然而 由于某种原因
  • 即使对于新上下文,OnModelCreating 也仅调用一次

    我有多个相同但内容不同的 SQL Server 表 在编写代码优先 EF6 程序时 我尝试为每个程序重用相同的数据库上下文 并将表名称传递给上下文构造函数 然而 虽然每次都会调用构造函数 但尽管每次都是从 new 创建数据库上下文 但 On

随机推荐

  • 如何在 XSLT 1.0 中执行 for-each-group 而无需键/Muenchian 分组

    我目前正在使用 XSLT 并尝试按属性的子字符串对节点进行分组 唯一的问题是我在无法使用 xsl key 的环境中工作 我想知道对诸如以下内容进行分组的最佳方法
  • div 没有正确从左向右移动

    下面是我的代码片段 我用它来将 div 从左向右移动 https jsfiddle net nf6pqbr0 1 u go click function var stop stopdiv offset left var obj docume
  • 如何使用 Node.js 在 MongoDB 中使用cursor.forEach()?

    我的数据库中有大量文档 我想知道如何遍历所有文档并更新它们 每个文档都有不同的值 答案取决于您使用的驱动程序 我知道的所有 MongoDB 驱动程序都有cursor forEach 以一种或另一种方式实施 这里有些例子 节点 mongodb
  • 将图像水平居中在闪亮的 FluidRow 中

    是否可以在闪亮的 ui FluidPage 中将三个图像排成一行居中 并将每个图像的宽度固定为 300px 要得到 我的一个想法是使用 splitLayout 并以某种方式插入图像作为窗口宽度的函数 但我不确定如何实现这一点 我知道您可以使
  • java.lang.OutOfMemoryError:在 OOM 之前无法分配分配

    实际上 我正在尝试创建一个包含 n 个多媒体文件的应用程序 其中包括图像和视频 我的应用程序大小约为34MB 我的资产规模约为60mb 当我在普通设备中加载应用程序时 我们没有遇到任何问题 但是具有2K resolutions例如Nexus
  • 如何使用“findstr”匹配IP地址?或者 Windows 中任何其他批处理方法

    正如标题所说 我想在windows中批量匹配ip地址 请告诉我该怎么做 我看到 findstr 可以与正则表达式匹配 例如 0 9 但是 findstr 怎么能匹配它出现的情况一到三次 Since findstr的正则表达式支持有点 过时
  • 强制文件下载 PDF“打开方式”框显示它是 Firefox 文档?

    我正在尝试强制下载 PDF 文件 一切正常 唯一的问题是 当它显示 下载框 时 它说它是 Firefox 文档 实际上应该说 Adobe Acrobat 文档 查看图像 下面是我正在使用的代码 1 从gmail强制下载盒子 效果很好 2 从
  • 在 Matlab 中在网格上绘制 3D 条形图

    我有一个矩阵 A 包含 50 行和 4 列 并且条目填充有整数 我的兴趣是根据这些数据构建堆叠的 3D 条形图 但是 使用 bar3 A stacked 创建一行 50 个条形图 而我希望将这些条形图绘制在大小为 5 垂直 x 10 水平
  • Oct 文件在 Octave 3.6.4 或 4.0.0 下运行,但不能同时运行

    我安装了两个版本的 Octave 通过包管理器 Linux Mint Debian 安装的版本 3 6 4 以及从源代码编译的版本 4 0 0 我在 octaverc 文件指向的文件夹中还有许多 oct 文件 我的问题是 4 0 0 版本无
  • 使用列表理解的带有谓词的自定义过滤器函数

    我需要开发自己的过滤功能 类似于filter在 Haskell 中工作 但使用列表理解和谓词 所以我会放lcFilter gt 3 1 2 3 4 5 6 10 444 3 在 ghci 中 它会打印所有大于 3 的数字 我的代码基于我擅长
  • 使用自定义类作为 Q_PROPERTY

    我有两节课TestA and TestB TestA延伸QObject 我已经设置了一些Q PROPERTY就这样 Q PROPERTY QString a string READ getString WRITE setString Q P
  • 如何从链接列表中抓取 HTML 表格

    我正在尝试使用 XML 包抓取一些表 选举数据 浏览后 我发现如何使用以下方法抓取单个网址 library XML url lt http www elecciones2011 gob ar paginas paginas dat99 DP
  • 空手道框架语言支持[重复]

    这个问题在这里已经有答案了 是否可以使用 KARATE 框架编写 C 实用程序 我已经使用 Java 编写了用于自动化 API 的实用程序函数 但现在我想用 C 编写实用程序函数 有没有办法做到这一点 空手道实际上是语言中立的并且使用Ghe
  • 无限循环错误EditText

    首先看我的代码 这些都在我的活动中 EditText text1 text2 Are defined corretly not problem text1 addTextChangedListener new MyTextWatcher o
  • android ffmpeg opengl es 渲染电影

    我正在尝试通过 NDK 渲染视频 以添加一些 sdk 中不支持的功能 我正在使用 FFmpeg 来解码视频 并可以通过 ndk 进行编译 并使用this作为起点 我修改了该示例 而不是使用 glDrawTexiOES 来绘制纹理 而是设置了
  • 为什么不在每次 Flask 启动时都生成密钥呢?

    使用会话时 Flask 需要一个密钥 在我见过的每个示例中 密钥都是以某种方式生成的 然后存储在源代码或配置文件中 永久保存的原因是什么 为什么不在应用程序启动时简单地生成它呢 app secret key os urandom 50 密钥
  • 在单独的线程中运行 Windows 窗体

    我正在处理在表单中运行控件 但是表单本身对我来说没有任何价值 我本质上希望表单运行任务并返回一个值 但是为此我想使用 AutoResetEvent 之类的东西仅在函数调用完成时返回 这显然会阻塞表单线程并使其不可能为了完成任务 我为我的项目
  • IOError: [Errno 13] 权限被拒绝:

    我构建此代码是为了专门识别 XML 文件负载并从这些文件中提取坐标 这是我的代码 from xml etree import ElementTree as ET import sys string os arcgisscripting gp
  • Slick2D 字体不起作用

    我有 Slick2D 库并用 Java 制作游戏 我一直想知道 只是一个简短的问题 如何在 Graphics 对象上设置字体以使用不同的字体进行绘制 我无法让它发挥作用 我认为它与 AngelCode 有关 但需要某种不是 tff 的格式
  • 这个程序中的 fread 有什么问题吗?

    我是 C 语言的中级学生 我正在尝试制作一个银行管理程序 但首先我需要制作一个登录程序 所以我创建了以下程序之一 由于我最近了解了C中的文件I O 并且对fread和fwrite不太了解 我有一个文件 data txt 其格式如下 用户1