Tag: fgets

如何在c中使用scanf读取空格?

问题:我需要能够识别连续出现两个空格的时间。 我读过以下问题: 如何从\ n分隔文件中读取字符串 如何用空格读取scanf 我知道scanf问题: http : //c-faq.com/stdio/scanfprobs.html 输入将采用以下格式: 1 5 3 2 4 6 2 1 9 0 两个空格表示需要处理下一组数据并与其自身进行比较。 线的长度未知,每组中的数字或整数是未知的。 两个空格是分隔下一个数据集的最多空格。 虽然我可以使用fgets和各种内置函数来解决这个问题,但我现在处理scanf问题可能会更容易。 但是,如果情况并非如此,使用fgets,strtok和atoi将完成大部分工作,但我仍需要连续识别两个空格。 下面将采用整数直到输入非整数。 while(scanf(“%d”,&x)== 1) 我需要做的是读取空格,如果有两个连续的空格,我将使程序与下一组数据做一些不同的事情。 一旦我得到一个白色空间,我不知道该怎么说: if((input ==“whitespace”)&&(previousInput ==“whitespace”)) 雅达亚达 else(input ==“whitespace”) 雅达亚达 其他 雅达亚达 感谢您的时间,感谢您的帮助。 获得的经验:尽管Jonathan Leffler在下面发布了scanf的解决方案,但解决方案对于getc来说更为直接(通过对内部scanf,正则表达式和char的更少了解)。 回想起正则表达式的更好的知识,scanf和char会使问题变得更容易,当然知道哪些函数是可用的,哪一个是从一开始就使用的最好的函数。

使用fgets从文件中读取

我正在阅读格式文件 1 32 43 23 32 43 123 43 54 243 123 2222 2 这是我的代码片段。 string[100]; while(!feof(fp)) fgets(string,100,fp) 现在,当我把每一个字符串放在最后一个字符串中时,我会得到重复和一些更多的歧义(就像其他东西也被打印出来说123左右)。 如何解决这个问题呢?

fgets()的返回值

我刚刚开始在C使用I/O 这是我的问题 – 我有一个文件,我从中读取了我的输入。 然后我使用fgets()来获取缓冲区中的字符串,我以某种方式使用它。 现在,如果输入对于缓冲区而言太短,即如果fgets()的第一次读取达到EOF ,会发生什么。 fgets()应该返回NULL (正如我在fgets()文档中读到的那样)? 它似乎没有,我得到了正确的输入。 除了我的feof(input)并没有说我们已经达到了EOF 。 这是我的代码片段。 char buf[BUFSIZ]; FILE *input, *output; input = fopen(argv[–argc], “r”); output = fopen(argv[–argc], “w”); /** * If either of the input or output were unable to be opened * we exit */ if (input == NULL) { fprintf(stdout, “Failed to open file – […]

如何fgets()C中文件的特定行?

所以,我正在尝试找到一种方法来fgets()C中文本文件中的特定行,以将该行的内容复制到更永久的缓冲区中: 基本上,我想知道是否有一种方法可以做到这一点,没有类似于以下代码: FILE *fp; fp = fopen(filename, “r”); char line[256]; char * buffer; int targetline = 10; while( targetline > 0) { fgets(line, 256, fp) } buffer =(char*)malloc(sizeof(char) * strlen(line)); strcpy(buffer, line); 所以基本上我不想遍历文件n-1次只是为了到达第n行……它只是看起来效率不高(而且,这是作业,我需要得到100%哈哈) 。 任何帮助,将不胜感激。

scanf()和fgets()之间的区别

我想知道fgets()和scanf()之间的区别。 我使用C作为我的平台。

当文件流没有新数据时如何防止fgets阻塞

我有一个popen()函数执行“tail -f sometextfile”。 只要文件流中有数据显然我可以通过fgets()获取数据。 现在,如果没有来自尾部的新数据,fgets()会挂起。 我试过ferror()和feof()无济于事。 当文件流中没有新内容时,如何确保fgets()不会尝试读取数据? 其中一个建议是select()。 由于这是针对Windows平台选择似乎不起作用,因为匿名管道似乎不起作用(请参阅此文章 )。

如何用fgets()读取stdin?

我写了下面的代码来从终端窗口读取一行,问题是代码卡在无限循环中。 行/句子的长度是未定义的,因此我计划将其部分读入缓冲区,然后将其连接到另一个字符串,该字符串可以通过realloc相应的扩展。 有人可以发现我的错误或建议更好的方法来实现这个目标吗? #include #include #define BUFFERSIZE 10 int main (int argc, char *argv[]) { char buffer[BUFFERSIZE]; printf(“Enter a message: \n”); while(fgets(buffer, BUFFERSIZE , stdin) != NULL) { printf(“%s\n”, buffer); } return 0; }

strstr不起作用

如果我输入“test”,为什么这段特殊的代码在strstr()上返回false? char input[100]; int main() { fgets(input, 100, stdin); printf(“%s”, input); if(strstr(“test message”, input)) { printf(“strstr true”); } } 我认为strstr在第一个参数中搜索了第二个参数的实例? 当我用一些文本替换输入或直接分配它时,它可以工作,但它似乎不适用于fgets。

fgets()是否返回NULL并且符合短缓冲区?

在unit testing中,包含fgets()的函数在缓冲区大小n < 2时遇到意外结果。 显然这样的缓冲区大小是愚蠢的,但测试正在探索极端情况。 简化代码: #include #include void test_fgets(char * restrict s, int n) { FILE *stream = stdin; s[0] = 42; printf(” errno:%d feof:%d ferror:%d retval:%ps[0]:%d\n\n”, errno, feof(stream), ferror(stream), retval, s[0]); } int main(void) { char s[100]; test_fgets(s, sizeof s); // Entered “123\n” and works as expected test_fgets(s, 1); // fgets() –> NULL, […]

fgets()包括最后的换行符

fgets(input,sizeof(input),stdin); if (strcmp(input, “quit”) == 0){ exit(-1); } 如果我输入quit,它不会退出程序; 我想知道为什么会这样。 顺便说一句, input被声明为char *input; 。