C语言中,scanf函数需要回车键来结束输入,如果需要实时读取按键的话,可以使用getchar()
getchar() 只能接受一个字符,因此,需要每读取一个字符后,需要和之前的字符进行拼接,并判断是否需要结束输入
int main(){
long nc=0;
while (getchar() != EOF) {
++nc;
printf("\ncharacter count:\t%ld\n",nc);
}
return 0;
}
为啥会有这种想法
等等,你是指"scanf函数调用后,如何除掉输入流中的多余的回车符或者空格符"的话,那当我上面的话没说 -_-
可以每次在scanf函数调用后立马调用getchar()
但是这样没有除掉空白符,所以应该
如果你嫌这很麻烦(每一次scanf调用,都要写这玩意?)。还有另一种方案 -- sscanf。
他与scanf非常相似。只不过它的输入来源来自第一个参数src。
例如你想从字符串str中读入一个日期格式那么可以这么表达
你可能会想str的内容咋来的?fgets函数可以帮你,她的使用方法如下。
所以如果你想写一个读取时间格式的程序则可以这么写
因为fgets是读入一行(包括空白符和'\n')所以不必担心会有空白符遗漏
所以不使用scanf是最好啊-_-
当然要用又怕麻烦的话你就一直用scanf用到底这样就不用担心会有多余的空白符了(反正都会被忽略)
scanf可以手动换行输入。即在键盘上的输入顺序为:5 回车 9。
scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。该函数的原型为:
# include <stdioh>
int scanf(const char format, );
它有两种用法,或者说有两种格式。
1、canf("输入控制符", 输入参数);
功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。
2、scanf("输入控制符非输入控制符", 输入参数);
这种用法几乎是不用的,也建议永远都不要用。但是经常有人问,为什么 printf 中可以有“非输出控制符”,而 scanf 中就不可以有“非输入控制符”。事实上不是不可以有,而是没有必要。
扩展资料
使用scanf的注意事项
1、参数的个数一定要对应
“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。这句话同样对 scanf 有效,即“输入控制符”和“输入参数”无论在“顺序上”还是在“个数上”一定要一一对应。
2、输入的数据类型一定要与所需要的数据类型一致
在 scanf 中,对于从键盘输入的数据的类型、scanf 中“输入控制符”的类型、变量所定义的类型,这三个类型一定要一致,否则就是错的。虽然编译的时候不会报错,但从程序功能的角度讲就是错的,则无法实现需要的功能。
3、在使用 scanf 之前使用 printf 提示输入
程序写好之后,编译、链接、执行,然后d出黑窗口,出现一个光标在那不停地闪。对于编写程序的人来说他知道要输入什么,但是对于用户而言,用户不知道是什么意思。
所以之前的程序都缺少提示信息!因此在使用scanf之前,最好先用printf提示用户以什么样的方式输入,这样可以大大提高代码的质量。
参考资料来源:
百度百科——scanf
在用二进制文件时,不进行这种转换,在内存中的数据形式与输出到外部文件中的数据形式完全一致,一一对应。
使用getchar();
例如:
#include<stdioh>int main()
{
char a[100],b[100];
scanf("%s",a);
getchar();
scanf("%s",b);
puts(a);
puts(b);
return 0;
}
/
运行结果:
123
abc
123
abc
/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)