先说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;
}