Tag: stdio

C相当于autoflush(每次写入后刷新stdout)?

在Perl中,我可以键入: $|++; 打印到STDOUT的任何内容都将自动fflush()编辑。 C中有等价物吗? 换句话说,有什么方法可以告诉stdio在每次printf()之后自动刷新stdout,它会自动刷新stderr的方式吗?

如何从C中的stdio获取int?

这有很大的麻烦…… printf(“> “); int x = getchar(); printf(“got the number: %d”, scanf(“%d”, &x)); 产量 > 1234 got the number: 1

C中的字符串流

print2fp(const void *buffer, size_t size, FILE *stream) { if(fwrite(buffer, 1, size, stream) != size) return -1; return 0; } 如何将数据写入字符串流而不是文件流?

格式字符串中的空格(scanf)

请考虑以下代码: #include int main() { int i=3, j=4; scanf(“%dc %d”,&i,&j); printf(“%d %d”,i,j); return 0; } 如果我必须更改变量的值,我可以将2c3或2 c 3或2c 3作为输入。 如果我希望用户输入我想要的相同模式,我该怎么办意味着如果%dc%d然后只有2c3是可接受的而不是2 c 3 ,反之亦然如果它是%dc %d ?

freopen:恢复原始流

我需要将stdout转发到不同的文件,以分离生成的一些打印和恢复到正常的标准输出。 我用freopen以这种方式切换到文件: char name[80]; memset(name, 0, 80); strcpy(name, “./scripts/asm/”); strcat(name, m_func->m_name->m_value); strcat(name, “.shasm”); freopen(name, “w”, stdout); 它确实有效,但在过程结束时(请注意,stdout以前一种方式重定向多次)我无法将其恢复为原始标准输出。 我尝试了以下方法: freopen(“/dev/stdout”, “w”, stdout); 但它似乎不起作用..只是为了我正在macosx上开发的信息。 我该怎么办? 提前致谢

stdin上的close / fclose是否保证是正确的?

似乎以下调用执行您期望的操作(关闭流并且不允许任何进一步的输入 – 在流上等待输入的任何内容都会返回错误),但是它是否保证在所有编译器/平台上都是正确的? close(fileno(stdin)); fclose(stdin);

Win32 – 从超时读取stdin

我正在尝试做一些我认为应该简单的事情:从标准输入执行阻塞读取,但如果没有可用数据,则在指定的时间间隔后超时。 在Unix世界中,这对于select()来说很简单,但是在Windows中不起作用,因为stdin不是套接字。 如果没有创建额外的线程等,下一个最简单的选择是什么? 我正在使用针对Win32环境的visual C ++。 到目前为止我尝试过: 使用select (如果输入不是套接字则不起作用) 使用WaitForSingleObject(GetStdHandle(STD_INPUT_HANDLE)) 。 – 雷米的第一个建议。 如果标准输入是控制台(其他人报告了同样的问题),当你调用它时,它总是会立即返回 使用重叠IO并执行WaitForSingleObject (Remy的第三个建议)。 在这种情况下,当输入来自控制台时,读取似乎总是阻塞 – 似乎stdin不支持异步I / O. 目前我认为我唯一剩下的选择是创建一个线程,它将执行阻塞读取,然后发出事件信号,然后让另一个线程等待事件超时。

为什么scanf在无效输入上陷入无限循环?

在第5行中,我读取一个整数,如果它读取整数,则isint为1,如果不是整数, isint 0。 如果isint为0,我有一个循环要求用户给出一个整数,我会读取,直到用户给出一个整数。 我尝试这个代码给出一个字符而不是一个整数,但我有一个无限循环。 该程序只是不等待提供新的输入。 我的代码出了什么问题? #include int main(void) { int arg1; //int arg2; int attacknum = 1; int isint = 1; //printf(“Insert argument attacks and press 0 when you have done this.\n”); printf(“Attack %d\n”, attacknum); attacknum++; printf(“Give attacking argument:”); isint = scanf(“%d”, &arg1); //line 5 while(isint == 0){ printf(“You did not enter a […]

Arduino:printf / fprintf打印问号而不是浮点数

我有一个Arduino草图的以下代码: #include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); static FILE lcdout = {0} ; static int lcd_putchar(char ch, FILE* stream) { lcd.write(ch) ; return (0) ; } void setup() { lcd.begin(16, 2); fdev_setup_stream (&lcdout, lcd_putchar, NULL, _FDEV_SETUP_WRITE); } void loop() { stdout = &lcdout; printf(“%.2f Volts”, 2.0); } 问题出现在代码的最后一行。 这应该打印出“2.00伏特”,而是打印“?伏特”(问号而不是实际的浮点值)。 如果我尝试格式化整数,这很有用。 所以基本上,如果我用以下内容替换printf行,它将正常工作: printf(“%d Volts”, […]

无法使用fopen()打开文件

我一直在尝试打开文件和输出文本,但我一直在收到错误。 所以我想我会从一开始就尝试打开文件。 这是我的代码: #include #include #define CORRECT_PARAMETERS 3 int main(void) { FILE *file; file = fopen(“TestFile1.txt”, “r”); if (file == NULL) { printf(“Error”); } fclose(file); } 当我运行该文件时,“错误”被打印到控制台,就是这样。 TestFile1.txt与我的.exe位于同一位置。 我该如何解决?