gpt4 book ai didi

c - ***使用 fscanf 从 C 中的文件中读取***,扫描并打印 .txt 文件中不存在的字符

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:34 25 4
gpt4 key购买 nike

大家好,感谢您的点击!(讨厌被卡住)

我正在尝试将一个 char 值从一个文件 fscanf 到我的结构中的一个变量。当我扫描时,我收到一封与我想要收到的完全不同的信件。问题出在我的 readfile 函数中。如果我解决了这个问题,我希望我可以扫描我需要做算术运算的数字。我的教授正在教我们 FCFS(关于 OS 调度算法而不是 FCFS 数据结构队列类(class))。所以文本文件列的意思是 (PAS.txt):

进程名称 |到达时间 |服务时间

   A    0   3
B 2 6
C 4 4
D 6 5
E 8 2

//Main.c
#include <stdio.h>
#include <time.h>
#include "lab8Func.h"


int main(int argc, const char * argv[]) {

struct FCFS process;

readFile(&process);

printf("%s",&process.jobList[0].processName)

}

//lab8func.h
#ifndef lab8Func_h
#define lab8Func_h
struct Job
{
char processName;
int arrivalTime;
int serviceTime;
int TAT;
int NTAT;

};

struct FCFS
{
struct Job jobList[5];

};

void readFile(struct FCFS*);

#endif /* lab8Func_h */

#include <stdio.h>
#include "lab8Func.h"


void readFile(struct FCFS *process1)
{
FILE *file;
char temp;
int tempAT;
int tempST;



if((file = fopen("/Users/Vin/desktop/PAS.txt","r")) == NULL)
printf("Error, File Not Open.");
else
{


for(int i=0 ; i < 1; i++)
{

temp = fscanf(file," %c", &temp); // where I'm stuck..
process1->jobList[i].processName = temp;


}


}

}

输出

bProgram ended with exit code: 0 

*** 小写 b ??如何 ?我在找大写字母 A!!*****

最佳答案

以下建议的代码:

  1. 干净地编译
  2. 自行清理(在本例中关闭输入文件
  3. 检查并处理错误
  4. 将错误消息输出到 stderr 而不是 stdout
  5. 遇到问题退出
  6. 不包含“魔数(Magic Number)”。 IE。硬编码的“5”
  7. 从输入文件中读取最多 5 行,而不是仅仅一行
  8. 更正发布代码中的(几个)语法错误
  9. 预制所需的功能
  10. 仍然使用 fscanf() 尽管更好的调用是 fgets() 因为这会消除包含 getc() 的代码块/li>
  11. 消除不需要的局部变量
  12. main() 函数使用正确的签名
  13. 记录为什么包含每个头文件
  14. 遵循公理:每行只有一个语句,每个语句(最多)一个变量声明。
  15. 将变量声明保留在使用它的地方。
  16. 努力改善传递给函数的变量的“含义”:readFile()

警告:我修改了代码布局(为了方便起见)以全部放在一个文件中

现在建议的代码:

#include <stdio.h>   // fopen(), fclose(), fscanf(), perror()
#include <stdlib.h> // exit(), EXIT_FAILURE
//#include <time.h>
//#include "lab8Func.h"

//lab8func.h
#ifndef lab8Func_h
#define lab8Func_h

#define MAX_RECORDS 5

struct Job
{
char processName;
int arrivalTime;
int serviceTime;
int TAT;
int NTAT;

};

struct FCFS
{
struct Job jobList[ MAX_RECORDS ];
};

void readFile(struct FCFS*);

#endif /* lab8Func_h */



int main( void )
{
struct FCFS jobs;

readFile(&jobs);

printf("%c", jobs.jobList[0].processName);
} // end function: main


void readFile(struct FCFS *jobs)
{
FILE *file = NULL;

if((file = fopen("/Users/Vin/desktop/PAS.txt","r")) == NULL)
{
perror( "fopen failed" );
exit( EXIT_FAILURE );
}

// implied else, fopen successful

for(int i=0 ; i < MAX_RECORDS; i++)
{
char temp;
if( 1 != fscanf(file," %c", &temp ) )
{ // handle error and exit
perror( "fscanf failed" );
fclose( file ); // cleanup
exit( EXIT_FAILURE );
}

// implied else, fscanf successful

jobs->jobList[i].processName = temp;

// finish inputting the current line from the file
int ch;
while( (ch = getc( file ) ) != EOF && '\n' != ch )
{
;
}
}

fclose( file ); // cleanup
} // end function: readFile

关于c - ***使用 fscanf 从 C 中的文件中读取***,扫描并打印 .txt 文件中不存在的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46720495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com