字符输入 输出和输入验证

博客围绕C语言展开,介绍了重定位和重定向概念,给出打开文件并显示内容的代码示例。阐述了C系统中重定向输入和输出的方法,如将输出定向至文件、输入定向至文件及组合重定向。还探讨了创建友好用户界面时缓冲输入问题及解决办法,提及混合值和字符输入的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注释

重定位让你能够用键盘输入程序文件,程序需测试文件的末尾。重定向是一个命令概念,因为要在命令行输入特殊的符号发出指令。

//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在读取数字是则会跳过空格,制表符和换行符

输入验证

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值