的scanf()函数接收输入数据,一个情况下,输入数据结束后,当(不是scanf函数的末尾,scanf函数只有数据在每个数据字段,之后按Enter键结束)。
①案件的空间,“输入”,“跳格”按钮。
②宽度的情况下结束。
③如非法入境。
键盘缓冲区可能会有残留信息的问题。
的scanf()函数应该只扫描标准输入流,其余的信息是必要的,以解决在scanf中的标准输入
()函数后添加FFLUSH(标准输入)。
平齐(标准输入)刷新标准输入缓冲区,废弃
FFLUSH(标准输出)刷新标准输出缓冲区的东西输入缓冲器,对事物的输出缓冲器输出到标准输出设备上。
stdin, stdout,stderr: standard I/O streams
介绍:
在通常情况下,UNIX每个程序在开始运行的时刻,都会有3个已经打开的stream. 分别用来输入,输出,打印诊断和错误信息。通常他们会被连接到用户终端(tty(4)). 但也可以改变到其它文件或设备。这取决于双亲进程的选择和设置。
这3个symbols都是stdio(3) macro,类型为指向FILE的指针。可以被fprintf() fread()等函数使用。
当一个程序开始启动后,stdin, stdout, and stderr are 0, 1,and 2,其它的文件描述符则排在其后。
stderr是不缓存的,stdout是行间缓存的。请注意:
所以:
for(i = 0i <10i++)
{
fprintf(stdout, "This is stdout[%d]", i)
fprintf(stderr, "This is stderr[%d]", i)
}
会全部显示stderr之后,再显示stdout.
又因为stdout是行内缓存,所以加 \n 后会立刻显示。
在程序中使用stdin,stdout,stderr,可以先:
extern FILE *stdout
extern FILE *stderr
重定向:
在实际应用中,可以分别使用stdout,stderr来输出。
之后再重定向:
如:
./example 1 >/dev/null
这样就将 stdout(1) 的输出丢弃。只显示stderr.
./example 2 >/dev/null
这样就将 stderr(2) 的输出丢弃。只显示stdout.
./example >>/dev/null 2>&1
将2(stderr)重定向到1(stdout). 但又将stdout(1) 丢弃。
所以即为丢弃stdout和stderr.
函数名: freopen功 能: 替换一个流
用 法: FILE *freopen(char *filename, char *type, FILE *stream)
程序例:
#include <stdio.h>
int main(void)
{
/* redirect standard output to a file */
if (freopen("OUTPUT.FIL", "w", stdout)
== NULL)
fprintf(stderr, "error redirectingstdout\n")
/* this output will go to a file */
printf("This will go into a file.")
/* close the standard output stream */
fclose(stdout)
return 0
}
===========================================================
上面不懂, 可以向下看, 没关系. 实践+理论 , 会慢慢在这详解.., 慢慢看.
下面重点:
在这再说一下. 不然很难理解, 我都没想到. 一直困惑不清啊....stdin stdout stderr.
现在懂了.
牢记: 目前主要的缓存特征是:stdin和stdout是行缓存;而stderr是无缓存的。
本文介绍如何将 stdout 时重定向到文件从某个 C 的程序,然后还原原始的 stdout 同一程序的某个更高位置。 C 函数通常用于重定向 stdout 或 stdin 是 freopen()。 要将 stdout 时重定向到文件名为 FILE.TXT 中,使用下面的调用:
freopen( "file.txt", "w", stdout )//把内容写到这个文件"file.txt"
此语句使所有的后续输出,通常定向到转到文件 FILE.TXT stdout,向。
若要返回到显示默认 stdout) 的 stdout,使用下面的调用:
freopen( "CON", "w", stdout )//输出到控制台"CON"
在这两种情况下检查 freopen() 以确保重定向实际发生的返回值。
下面是短程序演示了 stdout 时重定向:
运行代码
// Compile options needed: none
#include <stdio.h>
#include <stdlib.h>void main(void)
{
FILE *stream
//将内容写到file.txt,"W"是写 ("r"是读)
if((stream = freopen("file.txt", "w", stdout)) == NULL)
exit(-1)
printf("this is stdout output\n")
stream = freopen("CON", "w", stdout)stdout 是向程序的末尾的控制台重定向
printf("And now back to the console once again\n")
}
"CON" 是指控制台 就想DOS窗口.
==========================================
运行代码:
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
FILE *stream
char s[102400]=""
if((stream = freopen("file.txt", "r", stdin)) == NULL) //从文件读数据 (放到stdin , 其实stdin 也有自己的缓冲区.就向buf)
exit(-1)
fread(s, 1, 1024, stdin)//所以从标准输入里读出数据. 因为要注意stdin也是有自己的一块缓冲区.
printf("%s\n", s)//在这里打印读出来的数据.
}