(一)scanf读取空字符
#include<stdio.h>
#include<string.h>
int main(){
char s[1000];
int len;
scanf("%s",s);
// scanf("%[^\n]",s);
len=strlen(s);
printf("%d\n",len);
}
scanf用%s会跳过空字符,记录字符数组长度的时候停在空格处就不走了,就像我如果输入456 6,得到的结果就是3,输入CD 2的结果就是2。
而%[^\n]是在换行符之前的所有的字符都会被记录下来,包括空字符,换了行就不走了,空格照样走,就像我输入456 6,得到的就是4了。
(二)如何忽略开头的换行符
#include<stdio.h>
int main(){
char s[1000];
scanf("%*[\n]%[^\n]",s);
printf("%s\n",s);
}
*是指跳过这个东西不读,^指的是一直记录,走到这个东西之前,好了,stop了。
(三)如何读取输入的特定的哪个值
#include<stdio.h>
#include<string.h>
int main(){
int s;
scanf("%*d %*d %d",&s);
printf("%d\n",s);
}
同理,%*d则表示,这个地方输入的整数咱们不算。像上面这个代码如果输入4 5 6,那么我们得到的结果会是6,因为4和5没读入。这个对于文件读取特定的列很有帮助。
(四)如何忽略开头的字母不读
#include<stdio.h>
int main(){
char s[10]={0};
scanf("%*[a-zA-Z]%[0-9]",s); //不读字母,只读数字
printf("%s\n",s);
return 0;
}
输入nafknef123bsfcbs,则输出123!
(五)如何读取特定长度字符
#include<stdio.h>
int main(){
char s[10]={0};
scanf("%7s",s); //表示只读7个长度
printf("%s\n",s);
return 0;
}
这样可以有效抑制缓冲区溢出,输入123456789,输出1234567。
1016-题目描述
凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符?
注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字 符数时,空格和换行符不计算在内。
输入描述:
输入文件只有一行, 一个字符串s。
输出描述:
输出文件只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。
输入
234
输出
3
输入
Ca 45
输出
4
代码:
#include<stdio.h>
#include<string.h>
int main(){
char s[1000];
int len,sum=0;
scanf("%[^\n]",s);
len=strlen(s);
for (int i=0;i<len;i++){
if (s[i]!=' ')
sum++;
}
printf("%d\n",sum);
}