相关疑难解决方法(0)

在不移动文件指针的情况下检查文件指针是否已达到EOF?

我的问题很简单,但我无法在谷歌上找到它,所以我在这里.

基本上,作为一个例子,我正在读取一堆整数,直到输入文件中的EOF.我使用fgetc来检查,但随后它将文件指针移动到第二个整数的地址.如何检查此while循环中的EOF而不检查文件指针?

请记住,我将使用此循环执行比使用整数扫描更复杂的操作.另外,我不知道我使用fscanf而不是fgets.它只是一个简单的例子,向您展示我的意思.

while(fgetc(ifp) != EOF)
{

    fscanf(ifp, "%d", &test);
    printf("%d\n", test);
}
Run Code Online (Sandbox Code Playgroud)

例如,如果输入文件有整数1-10,则上面的代码将打印:

2 3 4 5 6 7 8 9 10

错过了1!

c pointers integer input eof

4
推荐指数
2
解决办法
2万
查看次数

C文件校验和

如何使用C制作文件的校验和?我不想使用任何第三方,只是默认的c语言而且速度非常重要(它少了50mb的文件,但无论如何)

谢谢

c checksum

3
推荐指数
3
解决办法
4万
查看次数

如何使用c检查文件是否包含内容?

我有一个源文件file1和一个目标文件file2,在这里我必须将内容从中移动 file1file2.

所以我必须先做一些验证.

  1. 我必须检查源文件是否存在?我可以用这个来检查:

    fp = fopen( argv[1],"r" );
    if ( fp == NULL )
    {
        printf( "Could not open sourse file\n" );
        exit(1);
    } 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 那我要检查源文件有没有内容?如果有空必须抛出一些错误消息.

这是我到目前为止所尝试过的.

c file-io file lcc-win32

3
推荐指数
4
解决办法
2万
查看次数

使用fscanf()使用feof()

这是我的代码.

#include<stdio.h>
void main(){
    FILE *fp;
    int a,b;
    fp=fopen("hello.txt","r");
    while(!feof(fp)){
      fscanf(fp,"%d %d",&a,&b);
      printf("%d %d\n",a,b);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的hello.txt是

1   2
3   4
Run Code Online (Sandbox Code Playgroud)

我的输出是

1   2
3   4
4   4
Run Code Online (Sandbox Code Playgroud)

为什么我的最后一行被打印两次.还没有fp达到EOF?

此外,stackoverflow中的标记说明Usually, when it is used, the code using it is wrong. 是什么意思?

谢谢.

c scanf feof

3
推荐指数
1
解决办法
2万
查看次数

没有使用strlen时strlen的分段错误?

我有一些代码,它接受一个文件,将每一行读入一个新的字符串数组(并为每个字符添加128),然后将每个数组分配到一个指针数组,然后打印每个数组.尝试运行代码时,由于以下原因,我收到错误,指出了分段错误:

strlen () at ../sysdeps/x86_64/strlen.S:106 106 ../sysdeps/x86_64/strlen.S: No such file or directory.

但我从来没有在我的代码中调用strlen?

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#define ROW 10
#define COL 40
#define ARGS 2
#define FLIP_VALUE 128

char** read_file (char* argv[], char **array_pointers);
char* new_array (void);
void print_strings (char** array_pointers);

int main(int argc, char* argv[])
{
    char **array_pointers = NULL;
    if (argc == ARGS)
    {
        array_pointers = read_file(&argv[1], array_pointers);
        print_strings(array_pointers);
    }
return 0;
}

char** read_file (char* argv[], char **array_pointers)
{
    FILE* file_name;
    int i = …
Run Code Online (Sandbox Code Playgroud)

c arrays string segmentation-fault strlen

3
推荐指数
1
解决办法
1741
查看次数

从文件中读取一个奇怪的问题

我正在做一个家庭作业,我仍然坚持我的部分代码工作超出了我的理解.我已经搜索了很多论坛,并尝试了其他一些方法来克服这个问题但我找不到解决方案.这是我的代码中有问题的部分......

    while(!feof(transmissionsFile)){
        int ret = fscanf(transmissionsFile, "%c %c %d", &tTms.tsn, &tTms.rsn, &tTms.sTime);
        if(ret != 3) continue;

        for(s = 0; s < N; ++s){
            if(tmsMtx[s][tTms.sTime].tsn == ' ' ){
                tmsMtx[s][tTms.sTime] = tTms;
                break;
            }
            continue;
        }       
    }
Run Code Online (Sandbox Code Playgroud)

我正在阅读的文件是一个简单的txt文件:

A B 3
C B 2
C A 1
B A 2
A C 3
B C 4
Run Code Online (Sandbox Code Playgroud)

但是当我试图读取文件时,它只会读取

A B 3
C A 1
A C 3
Run Code Online (Sandbox Code Playgroud)

我已经检查了"ret"函数的返回值,我看到它为读取的那些返回3,对于未读取的函数返回2次...我也使用完全相同的格式将数据读取到其他结构中. ..必须有一些我想念的东西,但我无法弄清楚.我很感激任何指导:)

这是我为解决这个特定问题而编写的整个代码,对于那些可能想知道的人来说,这部分应该创建一个转换矩阵并读取值以填充矩阵.例如:T3中的A到B为第一行文件...

#include <stdio.h>

int main()  {

    int N = 5;
    //  Opening required …
Run Code Online (Sandbox Code Playgroud)

c

3
推荐指数
1
解决办法
103
查看次数

从c ++文件中读取和打印UTF-8符号

我遇到了一个问题,在互联网上找不到答案.虽然我发现了许多类似的问题,但没有一个答案适合我.所以我的部分代码是:

wstring books[50];
wstring authors[50];
wstring genres[50];
wstring takenBy[50];
wstring additional;
bool taken[50];
_setmode(_fileno(stdout), _O_U8TEXT);
wifstream fd("bookList.txt");
i = 0;
while (!fd.eof())
{
    getline(fd, books[i]);
    getline(fd, authors[i]);
    getline(fd, genres[i]);
    getline(fd, takenBy[i]);
    fd >> taken[i];
    getline(fd, additional);
    i++;
}
Run Code Online (Sandbox Code Playgroud)

我需要的是用C++读取用UTF-8编码的文本文件.但是,当我读取文件时,那些宽字符串会被更改,当我打印它们时,输出文本是完全不同的.输入: ±čč 输出:ÄÄÄ 我如何避免它并正确阅读文本?我正在使用Visual Studio 2015,C++,Windows 10.

c++ windows utf-8

3
推荐指数
1
解决办法
504
查看次数

C99:fscanf()设置eof早于fgetc()是标准的吗?

我尝试在64位Windows PC上使用VS2017(32位版本),在我看来,fscanf()在成功读取文件中的最后一项后立即设置eof标志.在fscanf()读取与流相关的文件中的最后一项后,此循环立即终止:

while(!feof(stream))
{
    fscanf(stream,"%s",buffer);
    printf("%s",buffer);
}
Run Code Online (Sandbox Code Playgroud)

我知道这是不安全的代码......我只是想了解这种行为.请原谅我 ;-)

这里,stream与包含"Hello World!"等字符串的普通文本文件相关.该文件中的最后一个字符不是换行符.

但是,fgetc()在处理完最后一个字符后,尝试在此循环中读取另一个字符,这导致c = 0xff(EOF):

while (!feof(stream))
{
    c = fgetc(stream);
    printf("%c", c);
}
Run Code Online (Sandbox Code Playgroud)

fscanf()和fgetc()的这种行为是标准化的,依赖于实现还是其他什么?我不是问为什么循环终止或为什么它不终止.如果这是标准行为,我对这个问题很感兴趣.

c scanf eof

3
推荐指数
1
解决办法
148
查看次数

PHP feof($file) 对空文件返回 false

有php代码:

\n\n
#!/usr/bin/php\n<?php\nif ($file = fopen("file.txt", "r")) {\n        while(!feof($file)) {\n                $line = fgets($file);\n                echo "----" , $line , "----";\n            }\n        fclose($file);\n}\n?>\n
Run Code Online (Sandbox Code Playgroud)\n\n

和空文件“file.txt”

\n\n
[root@localhost]# ls -l  file.txt \n-rw-r--r-- 1 root root 0 \xd0\x90\xd0\xbf\xd1\x80 21 10:14 file.txt\n[root@localhost]# file file.txt \nfile.txt: empty\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么我得到?feof 在第一个循环中应该是 true 还是我错了?

\n\n
[root@localhost ]# php -f  test2.php\n--------\n\n[root@localhost ]# \n
Run Code Online (Sandbox Code Playgroud)\n

php

3
推荐指数
1
解决办法
519
查看次数

文件末尾有哪些字符?

我对C比较陌生,我的问题是:

是否总是只有EOF字符超过文件末尾?

示例代码:

FILE *fr;
int i;

fr=fopen("file.txt","r");

for (i=0;i<20;i++) {
    putchar(getc(fr));
}

fclose(fr);
Run Code Online (Sandbox Code Playgroud)

输出:

user@host:~$ ./a.out | xxd
0000000: 6173 640a ffff ffff ffff                 asd.......
Run Code Online (Sandbox Code Playgroud)

(file.txt包含asd\n)

c file

2
推荐指数
1
解决办法
151
查看次数

标签 统计

c ×8

eof ×2

file ×2

scanf ×2

arrays ×1

c++ ×1

checksum ×1

feof ×1

file-io ×1

input ×1

integer ×1

lcc-win32 ×1

php ×1

pointers ×1

segmentation-fault ×1

string ×1

strlen ×1

utf-8 ×1

windows ×1