- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以这只是一个简单的文件循环读取,我似乎无法弄清楚出了什么问题。我已经尝试了多种方法,但我似乎无法通过循环。我已经尝试了很多方法来进入(最初使用 getc,但使用 getc 整个循环将被忽略。
出于某种原因,它只是不适合我。如下所示,程序一进入 while 条件就卡住。也许有人可以解释为什么会这样,因为文件指针应该指向文件的开头。文件“input.txt”只是一个简单的数据列表,我应该将其读入结构,然后传递给另一个函数以输入到我的数据结构中。
然而,我似乎无法使用其他功能。花了几个小时尝试解决这个问题的不同方法。我确信有一个我没有看到的明显解决方案。
void readWrite(char *inFile)
{
FILE *fp;
FILE *fpBin;
char c;
stuBucket temprec;
long address;
//open binary file to initialize hash file
if ((fpBin = fopen(BINARYFILE, "w+b")) == NULL)
{
printf("Could not open binary file %s.\n", BINARYFILE);
return;
}
fwrite(fpBin, sizeof(struct student), 50, fpBin); //Write entire hash table to disk
if (fp = fopen(inFile, "r") == NULL) //open text file to read in from
{
printf("Could not open input file %s.\n", inFile);
return;
}
printf("Input File %s Open.\n", inFile);
下面while循环的问题
while(!feof(fp))
{
printf("hello");
fscanf(fp, "%d %s %s %f\n", temprec.stuID, temprec.lastName,
temprec.firstName, &temprec.amount);
writeRecord(temprec);
insert(temprec, fpBin); //hash data to disk
printf("insert done\n");
}
fclose(fp);
fclose(fpBin);
}//end readFromFile
在被跳过时交替
c = getc(fp);
while(c != EOF)
{
ungetc(c, fp);
printf("hello");
fscanf(fp, "%d %s %s %f\n", temprec.stuID, temprec.lastName,
temprec.firstName, &temprec.amount);
writeRecord(temprec);
insert(temprec, fpBin); //hash data to disk
printf("insert done\n");
c = getc(fp);
}
input.txt 的内容
6745 SMITH ANNA 7769.87
5675 JOHNSON SHEILA 23.91
1235 WILLIAMS JANE 93.12
2341 JONES BARBARA 74.23
8624 BROWN YELENA 56.75
9162 DAVIS SUSAN 902.34
7146 MILLER ALISON 8934.12
2328 WILSON ROYCE 123.09
1622 MOORE TONI 83.65
1832 TAYLOR JOAN 293.18
3271 GARCIA ROBERT 43.72
4717 MARTINEZ JHON 85.11
9345 ROBINSON ANDRE 15.67
1623 CLARK VICTOR 83.45
5673 HALL MARC 93.13
6275 ALLEN RAY 958.34
5392 HERNANDEZ MICHAEL 23.45
最佳答案
您的一个问题是:
if (fp = fopen(inFile, "r") == NULL)
它(当然)应该是:
if ((fp = fopen(inFile, "r")) == NULL)
然后这与您打开二进制文件的行相匹配。
关于c - 从文件循环读取 - 无法使用 feof 或 getc 进入循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23726896/
根据“未定义行为”的现代解释,编译器有权假设不会发生导致未定义行为“不可避免”的事件链,并且可以消除仅适用于以下情况的代码:将执行未定义的行为;这可能会导致未定义行为的影响及时倒退,并使原本可以观察到
在阅读 getc 手册页时,我遇到了: may be implemented as a macro which evaluates stream more than once. 那么,getc 也可以
程序有什么问题? #include #include #include main( ) { char * buf="robot.c"; char c;int i=0; FILE*f
在下面的代码中,我尝试存储文件中的所有字符(包括换行符)。如果读取换行符,变量“i”应该递增,“j”重置为 0,但这种情况不会发生。通过从我的数组打印到控制台,我已经确认换行符实际上正在被读取和存储。
它只是一个程序,我试图读取文件中作为参数传递的单词的出现次数,该文件也作为下一个参数传递。 代码如下所示: #include extern void exit(int); void main(int
我正在用 C 开发一个链表。我正在从一个 txt 文件中获取数据。但是当我尝试运行该程序时,它给我一个 getc() 的段错误这是代码, #include #include struct node{
程序: #include #include char *f_gets(char *s, int n, FILE *iop) { int c=0; char *cs; cs =
我试图找到 getc 和 fgetc 之间的区别。当时我看到这样的说法: The difference between getc and fgetc is that getc can be imple
我正在使用 Perl 6 模块 Term::termios . #!/usr/bin/env perl6 use v6; use Term::termios; my $saved_termios :=
我有一个函数读取 unsigned long long 中的每一位并将值存储在数组中,现在我想将此函数转换为返回数字中的下一位并将数据处理留给调用者的函数. 理想情况下,它的工作方式与 getc()
我有一个函数读取 unsigned long long 中的每一位并将值存储在数组中,现在我想将此函数转换为返回数字中的下一位并将数据处理留给调用者的函数. 理想情况下,它的工作方式与 getc()
我有一个函数 getNum(),它从文件中获取一个数字并返回它。当我回到 getNum() 时,我丢失了指针,它再次从文件的开始处开始。我想知道如何获取 getc 所在的位置,然后返回到那个地方。我在
所以我开始实现霍夫曼树,为此,我尝试从标准输入或输入文件获取字符值。输入文件(只是一个字符串“cheese”)被添加到数组 freqcounts 中,其中添加的 freqcounts 索引是它读取的字
我遇到的问题是在这一行: int tok = getc(fp); getc 返回 -1。为什么?提前致谢。 #include #include #include "file_reader.h" /
printf("hello2"); int i = 0; int done = 0; while (!done) { char c; printf("hello3"); c =
我正在阅读 Jim Trevor 等人所著的Cyclone:C 的安全方言。一切都是为了编程语言类(class)。作者表示,如果调用 getc(null) 可能会导致段错误,因为 C 标准没有指定如何
当我尝试从名为“file1”的文件中读取输入时,我的程序正确显示文件中的字符数,但采用无法识别的字符格式。下面是代码 #include #include void db_sp(FILE*); in
// Program to remove the comments and the spaces from the given input file #include #include using
这是我的代码。 #include #include int main(int argc,char** argv) { char a; a=9; FILE * fp; f
我正在尝试用 C 编写一个简单的“猫”克隆。我正在运行 Windows 7 并使用 MinGW 编译器。但是,每当我运行该程序时,它都会返回文本文件,但每个字符都替换为“☺”字符。提前谢谢你。 #in
我是一名优秀的程序员,十分优秀!