C语言程序设计书中 scanf函数中常用的合适字符有哪些?它们分别代表什么?
学会翻标准手册,建议收藏这个网址
https://zh.cppreference.com/w/c/io/fscanf
人机吧,这也问?csdn博客一搜一大把
在运行scanf函数时,scanf常常会被跳过。这是因为当你进行过了scanf函数后, 在第二次scanf函数时,
由于缓存区里依然存着第一次结束时送入的回车符,在第二次时没有读入就直接把回车符送入了,所以没有真正起到读入数据的作用。这个时候我们清除缓冲区就可以了。
解决方法:
scanf前面加rewind(stdin);
或者
scanf前面 fflush(stdout)
不过在Linux 下面这两种方法都没用
Linux 下的解决方法:
setbuf(stdin, NULL);//使stdin输入流由默认缓冲区转为无缓冲区
在C语言中,scanf函数用于从标准输入流stdin中读取格式化的输入数据。常用的格式字符包括:
除了上面列出的常用格式字符,scanf函数还支持其他格式字符,请参考参考资料中相关链接中的具体说明。
以上格式字符对应的含义分别为读取整型、无符号整型、浮点型、双精度浮点型、字符、字符串、指针地址、十六进制整型和百分号。
例如,读取整型数据可以使用%d格式字符,如下:
int num;
scanf("%d", &num);
注意:在使用scanf函数读取字符串时,应该特别注意,由于scanf不会自动忽略换行符,可能会导致后面的输入被忽略,所以最好使用fgets函数来读取字符串。另外,在读取字符串时,一定要保证目标变量分配了足够的空间,以免发生缓冲区溢出的情况。
如果scanf函数出现读取错误,可以使用feof函数和ferror函数来检测输入流的状态。
示例代码:
#include<stdio.h>
int main(){
int num;
char ch;
char str[100];
scanf("%d %c %s", &num, &ch, str);
printf("num=%d, ch=%c, str=%s", num, ch, str);
return 0;
}
以上代码中,%d和%c之间有一个空格,表示输入时需要输入一个空格才能正确分隔输入。如果输入的格式与scanf函数使用的格式不对应,如输入了字符而使用%d格式读取数据,将导致读取失败。
综上所述,scanf函数常用的格式字符包括%d、%u、%f、%lf、%c、%s、%p、%x和%%,每个格式字符代表一种数据类型,如整型、字符、字符串等。在读取字符串时,应该注意使用fgets函数,并保证目标变量分配了足够的空间,以免发生缓冲区溢出的情况。如果出现读取错误,可以使用feof函数和ferror函数来检测输入流的状态。