Tag: file io

如何使用select从stdin读取输入?

我试图使用select从stdin读取,之后我通过套接字将数据发送到服务器。 以下片段应遵循上述逻辑; 但它没有从stdin读取任何内容。 此外,它打印Enter command:用户第一次输入字符串后。 行printf(“%d %s\n”,__LINE__ ,buf); 也不打印任何东西。 fd_set rfds; struct timeval tv; int retval; char buf[BUFLEN]; while(1) { FD_ZERO(&rfds); FD_SET(STDIN_FILENO, &rfds); tv.tv_sec = 5; tv.tv_usec = 0; retval = select(STDIN_FILENO + 1, &rfds, NULL, NULL, &tv); if (FD_ISSET(STDIN_FILENO, &rfds)) { if (fgets(buf,BUFLEN, stdin)) { printf(“%d %s\n”,__LINE__ ,buf); if (strncmp(buf, “exit”, 4) == 0) […]

如何在读取字符串时排除null终止符?

该程序打开一个文件,其中包含湖泊的名称及其体积,以数百立方英里为单位 – 以空格分隔。 它的输出应该是湖的名字,后面跟着一些星号来表示它的体积到最接近的百立方英里(例如,一个体积为12.7百立方英里的湖泊会打印13个星号)。 但是,当它读入包含空格的名称时,它将一直读到该空格,然后在新行中打印下一个字符串。 有什么办法可以把“脏兮兮的湖”看作一条线而不是“粗糙的\ ndirty \ nlake”吗? 这是我到目前为止所拥有的: #include #include #include void name_asterisks(char name[20], float vol); main() { FILE *fp; fp = fopen(“lakes.txt”, “r”); char name[20]; float vol; if (fp == NULL) { printf(“File does not exist.\n”); system(“pause”); return 0; } while (fscanf(fp, “%s %f”, name, &vol) != EOF) { name_asterisks(name, vol); } […]

读取器接口,在C中使用FILE和char *

我正在修改我inheritance的解析器,目前只能通过读取从FILE *读取。 它现在需要能够从char *常量中提取数据,因此可以解析C字符串中的内联文本。 我已经看过以“读者”的forms提供一个简单的界面,所以你可以提供一个文件阅读器和一个char阅读器,解析器可以从中获取字符。 例如: // Inputs const char *str = “stringToParse”; FILE *f = fopen(…); // Creating a reader. Each reader stores a function ptr to a destructor // which closes the file if required and an internal state object. Reader *r = FileReader(f); // -or- Reader *r = CharReader(str); // Start parsing […]

使用fread()和fseek()在C中读取文件的一部分

我正在尝试将文件读入缓冲区,块大小为BLOCK_SIZE (当前等于1000 unsigned chars )。 我的代码最初找到了为了读取整个文件而必须读取的块数(通常为2-4),然后迭代通过for循环读取文件(忽略“ +17+filenamesize ”的东西,这就是全部在该计划的后期需要。 但是,仅在第一次,当j=1 ,它是否实际将数据放入buf数组中。 在其他情况下,当j != 1 , strlen(buf)返回0 。 我认为问题是使用fseek()在读取文件之前寻找文件的第二部分或者是内存分配问题。 任何帮助将被赞赏使它将文件的1000-1999 个字符读入buf数组。 附件是代码的相关部分: unsigned char *buf; source = fopen(localpath,”r”); temp = filesize / BLOCK_SIZE + 1; for (j=1; j <= temp; j++) { if (j == 1) { buf = (unsigned char *) malloc((sizeof(unsigned char)) * (BLOCK_SIZE + […]

从文件读取到数组 – C

int main() { FILE* infile1; int stockCode[15]; char stockName[100]; int stockQuantity[15]; int stockReorder[15]; int unitPrice[15]; int i; infile1 = fopen(“NUSTOCK.TXT”, “r”); while(fscanf(infile1, “%d %s %d %d %f”, &stockCode, stockName, &stockQuantity, &stockReorder, &unitPrice) != EOF) { printf(” %3d %-18s %3d %3d %6.2f \n”, stockCode, stockName, stockQuantity, stockReorder, unitPrice); } fclose(infile1); } 我要做的是从文件中获取信息并将其存储到5个单独的数组中。 但是,在打印时,它只会正确打印出名称。 1394854864 Prune-Basket 1394854688 […]

尝试删除空格时C代码出错

这段代码是词法分析器的基础,它执行从源文件中删除空格的基本操作,并将其重写为另一个文件,每个单词在不同的行中。 但我无法理解为什么文件lext.txt没有得到更新? #include /* this is a lexer which recognizes constants , variables ,symbols, identifiers , functions , comments and also header files . It stores the lexemes in 3 different files . One file contains all the headers and the comments . Another file will contain all the variables , another will contain all […]

用O_RDWR打开 – 如何覆盖?

我想读取一个文件并更改其内容并将其写回文件。 我使用open来读取文件如下: bfd = open(m_file_name.c_str(), O_RDWR) 但是当我写作时,它有点附加到旧的。 我怎么能覆盖它呢?

理解C中的文件处理

我究竟如何从C中的文件中获取输入? 例如:Say我分配了一个指向特定文件的文件指针,并希望执行某些操作。 分配文件指针的语法究竟是什么假定文件位于C:\ Acads \ bin \ File.txt。 在我的代码中,当我尝试这个 FILE *fp1; fp1=(“C:\Acads\bin\File.txt”,”r+”); 它最终给了我一个错误。 更新:好的,这是我的主要疑问。 我怎么告诉编译器我的文件位于某某路径。 我已经尝试过你们告诉我的一切,但无济于事。

如何从文本文件中读取多个数字

所以这是我的代码,我不断收到分段错误。 如何格式化此代码以从文件中读取一组数字? 我的输入看起来像这样:82,46,71,56,44,12,100 62,67,64,65,62,39,68 68,90,78,57,76,45,82等 #include int main () { FILE *input = fopen(“input.txt”, “r”); int line[7]; int store = 0, read; if(!input) { printf(“Error: Filename \”input.txt\” not found!\n”); } store = 0; while(fscanf(input, “%d”, &read) != EOF) { line[store] = read; store++; } printf(“%d %d %d %d %d %d %d\n”, line[0], line[1], line[2], line[3], […]

将.txt文件读入二维数组

我有一个文本文件如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 我想读入2-d整数数组。 问题是文件没有提供有关二维数据维度的信息。 我尝试按如下方式进行: FILE *input_file = fopen(argv[1], “r”); while (! feof(input_file)) { read = fscanf(input_file, “%d%c”, &x, &del); if (read != 2) { i–; break; } in_data[i][j] = x; if ( del == ‘\n’) […]