有关EOF

先说EOF(end of file)的作用:文件的结尾
表示一般常量-1
表示standerd input 的结尾
(while (scanf(“%s”,a))!=EOF))
win环境下可以使用Ctrl+z来模拟EOF也就是结束
再说说与这个类似的NULL:表示0
同时也表示空 一样可以用于stdin的结尾
使用ctrl+z可以结束

首先先提出一个问题 输入若干个字符串 每个字符串长度不超过一百 要求把首字母大写。
下面是我的第一个设想

#include <stdio.h>
int main()
{
    char a[101];
    int n;
    printf("input a string :\n");
    scanf("%s",a);
    a[0]=a[0]-32;
    puts(a);//遇到空格自动结束 
    return 0;
}
结果是:
input a string:i am a student//这是输入
           I//这是输出的字符串

那么是什么导致了这种情况的发生,我查询了%s 的用法,也作出了验证

#include <stdio.h>
int main()
{
    char a[100]="in afjaskldfj ";
    puts(a);
    printf("%s\n",a);//%s 是可以输出空格的
    puts(a); 
    return 0;
}

也就是说这个错误与%s 无关,那么就应该是a[0]的问题了。

#include <stdio.h>
int main()
{
    char a[101];
    int n;
    printf("input a string :\n");
    scanf("%s",a);
    //a[0]=a[0]-32;
    printf("%s",a);//遇到空格自动结束 
    return 0;
}

我把a[0]去掉,依旧无法输出字符串,还是只输出了开头的一个字母。
我发现了,只有一开始就定义好的字符串可以这样,使用%s来直接输出,而从键盘输入的无法使用。
这就是一开始的问题所在!!!
那么新的问题来了 –为什么可以使用scanf("%s",a);
输入,却无法使用
printf(“%s”,a);`输出呢????
好吧现在发个问题?
解决好了,在下一步解决。

OK 上面的问题成功解决了
%s在读取字符串的时候 遇到空格就停止了 把空格视为结束符 但一样可以解决这个问题
把下面的代码中gets()换成scanf() 并且在输出的时候在%s后面加上一个空格就可以了。

这是使用gets()函数来解决的 ,gets函数可以输入空格,代码如下

#include <stdio.h>
int main()
{
    char a[101],*y;
    while(gets(a)!=NULL)//不能使用scanf 
    {
            y=a;
            *y=toupper(*y);
            for(y=a+1;*y!='\0';y++)
            {
                if(*(y-1)==' ')
                {
                    *y=toupper(*y);
                }
            }
            printf("%s",a);
    }
    return 0;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值