![]() |
伤情的毛巾 · 易语言PHP非对称加密,OPENSSL加密解 ...· 1 年前 · |
![]() |
谈吐大方的跑步鞋 · Github中国区star超1w的大佬们公众 ...· 1 年前 · |
![]() |
酷酷的生姜 · go 中的slice 合并 - 掘金· 1 年前 · |
![]() |
神勇威武的楼梯 · adb 如何访问调试应用的 ...· 1 年前 · |
我是编程新手,所以有一些我不知道的基础知识和常识。我有一个关于如何正确使用fgets的问题。根据对fgets的解释,似乎fgets应该在读取n-1个字符、命中EOF或命中换行符时停止。例如,我创建一个文本文件,如下所示:
red 100
yellow 400
blue 300
green 500
purple 1000
...
颜色和整数由制表符分隔。当我创建这个文本文件时,我需要在每一行的末尾按enter键来开始一个新行。在这种情况下,按enter等于添加换行符'\n',对吗?
如果在每一行的末尾有一个'\n‘是正确的,我运行如下的fgets代码:
fgets(string, 100, fp);
由于每行中包含的字符数远远小于100,因此fgets应该在达到最大长度限制之前命中换行符,并且应该停止并返回空值。对吗?
如果我上面的理解不正确,在每行的末尾没有'\n‘,或者fgets没有在每行的末尾停止,那么我应该选择多少个maxlength (即,fgets(string,N,stream)函数中的N)来确保文件输入正确,因为我的最终目标是解析每行并将每行存储到一个结构中。顺便说一下,文件中有100行。
发布于 2017-02-06 15:18:49
#include <stdio.h>
int main()
char str[150],str2[100][150];
int i=0,j=0,value[100];
FILE* fp;
fp = fopen("file.txt", "r");
while (fgets(str,150, fp)) {
printf("%3d: %s\n", i, str);
/** if you want to split value and string*/
sscanf(str,"%s %d",&str2[j],&value[j]);
printf("%d %s\n",value[j],str2[j]);
fclose(fp);
return 0;
}
您可以使用
sscanf()
轻松拆分值,使用
fgets()
读取文件。
发布于 2017-01-28 04:28:28
fp = fopen("sample.txt", "r");
while (1) {
if (fgets(line,150, fp) == NULL) break;
printf("%3d: %s", i, line);
printf("%d\n",i);
发布于 2018-10-30 00:53:18
// hello.c
// Usage:
// gcc -Wall hello.c && ./a.out /tmp/somefile.txt
#include <stdlib.h> // for perror, ...
#include <stdio.h> // for printf, ...
#include <assert.h> // for assert
#include <sys/time.h> // for gettimeofday
static inline long long int nowUs () {
long long int now;
struct timeval timer_us;
if (gettimeofday(&timer_us, NULL) == 0) {
now = ((long long int) timer_us.tv_sec) * 1000000ll +
(long long int) timer_us.tv_usec;
else now = -1ll;
return now;
int main (const int argc, const char * argv[]) {
assert(2 == argc);
long long int started = nowUs();
size_t count = 0;
char msg[128], * fgets_rv;
FILE * fp = fopen(argv[1], "r");
while ((fgets_rv = fgets(msg, sizeof(msg), fp))) {
assert(fgets_rv == msg);
count++;
if (ferror(fp))
perror(argv[1]);
else if (feof(fp)) {
printf("Read %zu lines of file '%s' in %lldµs\n",
count, argv[1], nowUs() - started);
else {
![]() |
酷酷的生姜 · go 中的slice 合并 - 掘金 1 年前 |