我的问题很简单,但我无法在谷歌上找到它,所以我在这里.
基本上,作为一个例子,我正在读取一堆整数,直到输入文件中的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制作文件的校验和?我不想使用任何第三方,只是默认的c语言而且速度非常重要(它少了50mb的文件,但无论如何)
谢谢
我有一个源文件file1和一个目标文件file2,在这里我必须将内容从中移动 file1到file2.
所以我必须先做一些验证.
我必须检查源文件是否存在?我可以用这个来检查:
fp = fopen( argv[1],"r" );
if ( fp == NULL )
{
printf( "Could not open sourse file\n" );
exit(1);
}
Run Code Online (Sandbox Code Playgroud)那我要检查源文件有没有内容?如果有空必须抛出一些错误消息.
这是我到目前为止所尝试过的.
这是我的代码.
#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.
是什么意思?
谢谢.
我有一些代码,它接受一个文件,将每一行读入一个新的字符串数组(并为每个字符添加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) 我正在做一个家庭作业,我仍然坚持我的部分代码工作超出了我的理解.我已经搜索了很多论坛,并尝试了其他一些方法来克服这个问题但我找不到解决方案.这是我的代码中有问题的部分......
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) 我遇到了一个问题,在互联网上找不到答案.虽然我发现了许多类似的问题,但没有一个答案适合我.所以我的部分代码是:
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.
我尝试在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()的这种行为是标准化的,依赖于实现还是其他什么?我不是问为什么循环终止或为什么它不终止.如果这是标准行为,我对这个问题很感兴趣.
有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?>\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n\n为什么我得到?feof 在第一个循环中应该是 true 还是我错了?
\n\n[root@localhost ]# php -f test2.php\n--------\n\n[root@localhost ]# \nRun Code Online (Sandbox Code Playgroud)\n 我对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)