作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下程序:
int main(int argc, char *argv[])
{
int a, b;
char c1, c2;
printf("Enter something: ");
scanf("%d",&a); // line 1
printf("Enter other something: ");
scanf("%d", &b); // line 2
printf("Enter a char: ");
scanf("%c",&c1); // line 3
printf("Enter another char: ");
scanf("%c", &c2); // line 4
printf("Done"); // line 5
system("PAUSE");
return 0;
}
scanf()
在缓冲区中留下了换行符,因此,该程序不会在用户输入数据的第4行处停止,而是将换行符存储在c2中并移至第5行。
char
数据类型上吗?因为我没有看到第1、2、3行中的
int
数据类型出现此问题,对吗?
最佳答案
scanf()
函数在尝试分析字符以外的转换之前会自动跳过前导空格。字符格式(主要是%c
;也包括扫描集%[…]
和%n
)是例外。他们不会跳过空格。
将" %c"
与前导空格一起使用可跳过可选的空白。不要使用scanf()
格式的字符串结尾的空格。
请注意,这仍然不会消耗输入流中甚至行尾的空白,因此请注意在同一输入流上也使用getchar()
或fgets()
的情况。我们只是让scanf在转换前跳过空白,就像%d
和其他非字符转换一样。
请注意,转换以外的非空白“指令”(要使用POSIX scanf terminology),例如scanf("order = %d", &order);
中的文字文本也不会跳过空白。文字order
必须与要读取的下一个字符匹配。
因此,如果您想从上一行跳过换行符,但仍需要在固定字符串like this question上进行文字匹配,则可能需要" order = %d"
。
关于c - scanf()将新行char留在缓冲区中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58124412/
这是我的jade雕像: section#entry-review-template.template(data-class='entry-review') table thead
我是一名优秀的程序员,十分优秀!