我是C的全新人,需要帮助解决这个问题。 我用fopen()读取文件,然后使用fgetc()获取它的内容。我想知道的是如何访问fgetc()返回的行,如果我可以将第4到第8个字符放入char数组中。下面是我在网上找到的一个例子,但我很难解析数据返回,我仍然没有对C的理解,也没有得到如何用int来存储一行字符。
FILE *fr;
fr = fopen("elapsed.txt", "r");
int n = fgetc(fr);
while(n!= EOF){
printf("%c", n);
n = fgetc(fr);
} printf("\n");
答案 0 :(得分:3)
下面 1首先打开文件 2获取文件大小 3分配大小到字符指针 4并从文件中读取数据
FILE *fr;
char *message;
fr = fopen("elapsed.txt", "r");
/*create variable of stat*/
struct stat stp = { 0 };
/*These functions return information about a file. No permissions are required on the file itself*/
stat("elapsed.txt", &stp);
/*determine the size of data which is in file*/
int filesize = stp.st_size;
/*allocates the address to the message pointer and allocates memory*/
message = (char *) malloc(sizeof(char) * filesize);
if (fread(message, 1, filesize - 1, fr) == -1) {
printf("\nerror in reading\n");
/**close the read file*/
fclose(fr);
/*free input string*/
free(message);
}
printf("\n\tEntered Message for Encode is = %s", message);
PS不要忘记添加#include <sys/stat.h>
。
答案 1 :(得分:1)
您没有使用fgetc检索一行。您正在从文件中一次检索一个字符。该示例保持检索字符,直到EOF字符被加密(文件结束)。看看fgetc的这个描述。
http://www.cplusplus.com/reference/clibrary/cstdio/fgetc/
在while循环的每次迭代中,fgetc将检索单个字符并将其放入变量“n”。可以帮助你在C中使用“字符”的东西就是把它想象成一个字节,而不是实际的字符。你在这里不理解的是int是4个字节,字符是1个字节,但两者都可以为相同的ASCII字符存储相同的位模式。唯一不同的是内部变量的大小。
上面的示例显示了一个带有“%c”的printf,这意味着将值取为“n”并将其视为ASCII字符。
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
您可以在while循环中使用计数器来跟踪您的位置,以便从文件中找到第4和第8个值。您还应该考虑如果输入文件小于最大大小会发生什么。
希望有所帮助。
答案 2 :(得分:0)
好吧看看它的盒子尺寸我可以有一个30厘米x 30厘米的盒子,可以容纳1个泡沫字母。现在这个函数我称之为'可以'返回一个60厘米x 60厘米的字母但99%可能会返回一个30厘米x 30厘米的字母,因为我知道它的读数 - 我知道如果我给它一个60厘米x 60厘米的盒子结果永远合情合理。
但如果我确定结果总是一个30厘米x 30厘米的盒子,那么我知道我可以转换一个函数的结果,该函数返回一个60厘米x 60厘米的盒子而不会丢失任何东西