注释
重定位让你能够用键盘输入程序文件,程序需测试文件的末尾。重定向是一个命令概念,因为要在命令行输入特殊的符号发出指令。
//file_eof.c--打开一个文件并显示该文件
#include<stdio.h>
#include <stdlib.h> //为了使用exit()
int main(void)
{
int ch;
FILE*fp;
char fname[50]; //储存文件名
printf("enter the name of the file:");
scanf ("%s", fname);
fp = fopen(fname, "r"); //打开待读取的文件
if (fp == NULL) //如果失败
{
printf("failed to open film. bye\n");
exit(1); //退出程序
}
//getc(fp)从打开的文件中获取一个字符
while ((ch = getc(fp)) != EOF)
putchar(ch);
fclose(fp); //关闭文件
return 0;
}
如何重定向输入和输出
绝大部分C系统都可以使用重定向,可以通过操作系统重定向所有程序,或只在C编辑器允许的情况下重定向C程序,假设prog是可执行程序,file1和file2是文件名
把输出定向至文件:>
./prog>file2
把输入定向至文件:<
./prog<file2
组合重定向:
./prog<file2>file1
./prog>film1<film2
这两种形式都是把file2作为输入,file1作为输出
一些系统要求重定向运算符左侧有一个空格,右侧没有空格。而其他系统,允许在重定位运算符两侧有空格或没有空格。
创建友好的用户界面
使用缓冲输入
//guess.c--一个拖沓且错误的数字程序
#include <stdio.h>
int main(void)
{
int guess = 1;
printf("pick an integer from 1 to 100.i will try to quess");
printf("it.\nRespond with a y if my guess is right and with");
printf("\n an n if it is wrong.\n");
printf("Uh.....is your number %d?\n", guess);
while (getchar() != 'y') //获取响应 ,与y做对比
printf("well,the,is it %d?\n", ++guess);
printf("i know i could do it!\n");
return 0;
}
当n输入时,读取程序n作为用户否定了数字1,在该程序中打印了两行。解决这种问题的方法是
一。使用while 循环丢弃输入行最后剩余的内容,包括换行符。
while (getchar() != 'y') //获取响应 ,与y做对比
{
printf("well,the,is it %d?\n", ++guess);
while (getchar() != '\n')
continue; //跳过剩余的数入行
}
该程序解决了换行符的问题,但是,该程序还是会把fp视为n .我们用if 语句筛选其他相应,首先添加一个char 类型变量
char response;
while ((response =getchar() )!= 'y') //获取响应 ,与y做对比
{
if (response == 'n')
printf("well,the,is it %d?\n", ++guess);
else
printf("sorry, i understand only y or n.\n");
while (getchar() != '\n')
continue; //跳过剩余的数入行
}
混合值和字符输入
假设程序要求用gatchar()处理字符输入,用scanf()处理数值输入,这两个函数都能很好地完成任务,但是不能把他们混用。因为getchar()读取每个字符,包括空格,制表符:而scanf在读取数字是则会跳过空格,制表符和换行符
输入验证