8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

scanf() 将换行符留在缓冲区中

Hyperian 1月前

57 0

我有以下程序:int main(int argc,char *argv []){int a,b; char c1,c2; printf(\'输入一些内容:\'); scanf(\'%d \',&a); //第 1 行 printf(&q ...

我有以下程序:

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;
}

正如我在 C 书中读到的,作者说 scanf() 在缓冲区中留下了一个换行符,因此,程序不会在第 4 行停止让用户输入数据,而是存储换行符 c2 并移动到第 5 行。

是吗?

但是,这种情况只发生在 char 数据类型上吗?因为我没有 int 在第 1、2、3 行中看到数据类型的这个问题。对吗?

帖子版权声明 1、本帖标题:scanf() 将换行符留在缓冲区中
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Hyperian在本站《c》版块原创发布, 转载请注明出处!
最新回复 (0)
  • scanf () 函数在尝试解析除字符以外的转换之前会自动跳过前导空格。字符格式(主要是 %c ;还有扫描集 %[…] — 和 %n )是例外;它们不会跳过空格。

    使用 " %c" 前导空格可跳过可选的空格。请勿在 scanf() 格式字符串中使用尾随空格。

    请注意,这仍然不会消耗输入流中剩余的任何尾随空格,甚至不会消耗到行尾,因此如果在同一输入流上使用 getchar() or fgets() 跳过空格 其他非字符转换 %d 所做的


    请注意,除转换之外的非空白“指令”(使用 POSIX scanf 术语 ),例如中的文字文本 scanf("order = %d", &order); 也不会跳过空格。文字 order 必须与要读取的下一个字符匹配。

    ,如果您想跳过上一行的换行符但仍然需要在固定字符串上进行文字匹配,那么 " order = %d" 您可能需 就像这个问题一样 .

返回
作者最近主题: