在C中逐行读取一个txt文件
read a txt file line by line in C
我正在尝试从 txt 文件中收回字符串。
文件内容为;
- 苹果
- 梨
- 橙色
基本上每一行都有一个单词,我想读取每一行并将单词缩回字符串 char* word[25]
因为较长的单词是 24 个字符。当我实现一个简单的代码来读取每行之间 ASCII 中的每个字符时,行尾的值 10
。因此,我创建了一个没有任何条件的 for
循环,并添加了 if
条件以发现行尾 (LF) 的 10
值。但它不起作用,我确定我搞砸了一些非常基本的代码或逻辑。抱歉,如果我的代码看起来不合逻辑或非常错误,我是相当新的。还有很多库添加了,因为如果我可以完成这一步,我将使用它们。 TIA
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
if (argc < 2)
{
printf("Usage: ./word filename\n");
return 1;
}
FILE* ptr = fopen(argv[1], "r");
char ch;
char* word[45];
for (int i = 0; ;i++)
{
ch = fgetc(ptr);
word[i] = &ch;
if (ch == 10)
{
break;
}
}
printf("%s\n", *word);
return 0;
}
终端输出
~/snippets/ $ make word
clang -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow word.c -lcrypt -lcs50 -lm -o word
~/snippets/ $ ./word lec3.txt
`
~/snippets/ $
如果你放弃指针会怎么样..
char ch;
char word[45];
for (int i = 0; ;i++)
{
ch = fgetc(ptr);
word[i] = ch;
if (ch == 10)
{
break;
}
}
printf("%s\n", word);
你也可以动态地做:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
if (argc < 2)
{
printf("Usage: ./word filename\n");
return 1;
}
FILE *ptr = fopen(argv[1], "r");
char ch;
int i = 0;
char *word = calloc(45, sizeof(char));
for (ch = fgetc(ptr); ch != EOF; ch = fgetc(ptr), i++)
{
if (ch == '\n')
break;
word[i] = ch;
}
printf("%s\n", word);
free(word);
return 0;
}
我正在尝试从 txt 文件中收回字符串。
文件内容为;
- 苹果
- 梨
- 橙色
基本上每一行都有一个单词,我想读取每一行并将单词缩回字符串 char* word[25]
因为较长的单词是 24 个字符。当我实现一个简单的代码来读取每行之间 ASCII 中的每个字符时,行尾的值 10
。因此,我创建了一个没有任何条件的 for
循环,并添加了 if
条件以发现行尾 (LF) 的 10
值。但它不起作用,我确定我搞砸了一些非常基本的代码或逻辑。抱歉,如果我的代码看起来不合逻辑或非常错误,我是相当新的。还有很多库添加了,因为如果我可以完成这一步,我将使用它们。 TIA
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
if (argc < 2)
{
printf("Usage: ./word filename\n");
return 1;
}
FILE* ptr = fopen(argv[1], "r");
char ch;
char* word[45];
for (int i = 0; ;i++)
{
ch = fgetc(ptr);
word[i] = &ch;
if (ch == 10)
{
break;
}
}
printf("%s\n", *word);
return 0;
}
终端输出
~/snippets/ $ make word
clang -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow word.c -lcrypt -lcs50 -lm -o word
~/snippets/ $ ./word lec3.txt
`
~/snippets/ $
如果你放弃指针会怎么样..
char ch;
char word[45];
for (int i = 0; ;i++)
{
ch = fgetc(ptr);
word[i] = ch;
if (ch == 10)
{
break;
}
}
printf("%s\n", word);
你也可以动态地做:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
if (argc < 2)
{
printf("Usage: ./word filename\n");
return 1;
}
FILE *ptr = fopen(argv[1], "r");
char ch;
int i = 0;
char *word = calloc(45, sizeof(char));
for (ch = fgetc(ptr); ch != EOF; ch = fgetc(ptr), i++)
{
if (ch == '\n')
break;
word[i] = ch;
}
printf("%s\n", word);
free(word);
return 0;
}