Tag: stdio

kbhit()双循环不能正常工作

只是为了好玩,我尝试用循环打印kbhit() ,以便按下按键后的程序无限打印该行,直到再次按下键盘。 它编译得很好,在运行时,只是给出了空白屏幕。 没有打印。 但是在单键按下结束程序。 虽然控制台没有关闭。 #include #include int main() { while(1) { if(kbhit()) { while(1) { if(kbhit()) { goto out; } printf(“Print Ed Infinitum Until Key Press”); } } } out: return 0; } 我该如何解决这个问题?

fprintffunction不起作用但它返回正数

我正在以下列方式使用fprintf 。 一切似乎都没问题,但fprintf根本不打印到我的文件中! fprintf(pFile, “%s\n”, “print”); 奇怪的是fprintf返回OK 。 它在上面的代码中返回6 ,但不打印到文件! 文件已成功创建但为空。 将它更改为printf正在打印,也可以。

fgetc返回一个未知字符

我有以下代码: FILE *f = fopen(‘/path/to/some/file’, ‘rb’); char c; while((c = fgetc(f)) != EOF) { printf(“next char: ‘%c’, ‘%d'”, c, c); } 出于某种原因,当打印出字符时,在文件的末尾,将打印出一个不可渲染的字符以及ASCII序号-1。 next char: ‘?’, ‘-1’ 应该是什么角色? 我知道这不是EOF,因为有一个检查,并且在字符打印后很快,程序SEGFAULT。

stdin是否包含回车符(\ r)char?

在SO答案中我写了这段代码: char fail_on_eof (int c) { if (c == EOF) exit (EXIT_FAILURE); return (char) c; } void skip_to_next_line (void) { char c; do { c = fail_on_eof (getchar ()); } while (c != ‘\n’); } 我想知道是否有任何终端可以返回’\r’ (只要在行尾有一个’\n’ ,上面的代码就会覆盖它)。 stdin是否包含’\r’ (在任何平台上)? 输入重定向怎么样stdin总是在文本模式下工作?

无法实现从文件中检索n个字节的(稳定)方法

我正在开发的库的目的之一是从文件中检索指定数量的字节,在这种特定情况下,我希望访问/ dev / random来检索基于熵的随机序列。 我对fread的主要问题是它会在等待更多熵时无限期挂起,这是不必要的。 我的下一个选择就是用feof包装fread来获取块中的字节,然后我至少可以提供完整的百分比以获得更好的体验,尽管我可以收集迭代1,2,3,4 ..的字节将是很难跟踪到完全相同的数量。 在C标准中是否有一种方法允许我正在寻找的东西,确切的数量和大块? 如果我要寻找超时,那么线程化数据请求是一个很好的选择吗?

如何在C 中打印中心对齐的字符串

任何人都可以帮我打印C中心对齐的string吗? 例如: int main() { int a = 20; char x[10] = “Hello”; char y[10] = “Hello”; printf (“%*s\n”,a, x ); printf (“%-*s\n”,a,y); } 在上面,第一个打印Hello向右对齐,第二个printf向左对齐,如下所示 Hello Hello 限制每个人的长度为20。 有没有办法打印Hello对齐到中心。 Hello 限制总长度为20。 先感谢您

如何实现getchar()?

我只是想知道如何实现getchar()? 是否有以下情况? 以这种方式读取单字节是非常低效的。 它是否使用缓冲? Pseudo code: int getchar(){ char buf[1]; int n = read(0,buf,1); if(n < 1) printf("Read failed"); return buf[0]; }

尽管导入stdio,但getline未在此范围内声明

我需要在C中使用getline() ,但是当我写: #define _GNU_SOURCE #include #include #include int main(int argc, char** argv) { char *line; getline(&line, NULL, stdin); free(line); return (0); } 编译器写入error: getline was not declared in this scope我该怎么办? getdline是不是在stdio.h被推迟了? 我之前从未遇到过这种问题。 我使用GCC GNU编译器。

setvbuf() – 当buf为NULL时的size参数

看来,当我运行以下代码时: #include #include int main(int argc, char* argv) { int i=0; setvbuf(stdout, NULL, _IOLBF,0); while (1) printf(“%d “,i++); return 0; } 它打印成1024个字符的块,无论我为setvbuf()定义的大小 。 问题是,在这种情况下,如果大小会以某种方式影响,那么1024个字符的定义来自何处。

putc需要stdout,vs puts

C历史问题在这里。 为什么C函数putc需要第二个参数,如 putc( ‘c’, stdout ) ; 虽然看跌哦这么方便 puts( “a string” ) ; msvc ++中有一个函数 putchar( ‘c’ ) ; 这可能是人们期望putc工作的方式。 我认为putc的第二个参数是能够将putc定向到一个文件,但是有一个函数fputc 。