有关EOF

来源:互联网 发布:手机淘宝体验中心在哪 编辑:程序博客网 时间:2024/06/03 21:40

先说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; } 
0 0
原创粉丝点击