1.sacnf:输入不含空格的字符串。
#include<stdio.h>
int main(){
char s[30];
scanf("%s", s);
printf("%s\n", s);
return 0;
}
因为scanf会将空格识别为输入数据的分隔符,所以用它是不能输入含有空格的字符串的。如输入Hello World!,它会将其识别为两个字符串,上面的代码结果只会输出Hello。
2.gets():输入单行字符串。
gets()函数的功能是将键盘输入的单行字符串保存到字符数组中。该函数可以读取空格。
#include<stdio.h>
int main(){
char s[30];
gets(s);
printf("%s\n", s);
return 0;
}
据说这个函数有安全风险,已经成为弃儿。新标准对这个函数进行了升级,加了个小尾巴,变成gets_s()。不过这个升级版不光造型上狗尾续貂,食用起来也是个鸡肋,因为有些编译器(比如GCC)根本不支持它。
要想又安全又兼容怎么办呢?你得改用fgets(),这不免让人有杀鸡用牛刀之感。要替代gets(),你不得不把代码写成这样的复杂形式。
#include <stdio.h>
int main() {
char s[30];
//从标准输入读取字符串,会读取换行符
fgets(s, sizeof(s), stdin);
//去除换行符
s[strcspn(s, "\n")] = 0;
printf("%s\n", s);
return 0;
}
总之,真是麻烦!
注:strcspn() 函数返回'\n'在字符串s中的位置。通过将此位置的字符赋值为 '\0',就将换行符变成字符串的结束符。
3.getchar():输入单个字符。
#include <stdio.h>
int main() {
int ch;
printf("请输入一个字符: ");
ch = getchar();
printf("你输入的字符是: %c\n", ch);
return 0;
}
注意getchar()返回值的类型是int型,它返回的是读取的字符的 ASCII 值。
所以咱们可以输出一堆字符的ASCII值。
#include <stdio.h>
int main() {
int ch;
printf("请输入一堆字符: ");
while((ch = getchar())!=10)
printf("%c-%d\n", ch, ch);
return 0;
}