相关疑难解决方法(0)

scanf()将新行char留在缓冲区中

我有以下程序:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

是对的吗?

但是,这只发生在char数据类型中吗?因为我没有int在第1,2,3行中看到数据类型的这个问题.是不是?

c scanf

71
推荐指数
5
解决办法
6万
查看次数

为什么scanf("%d",[...])不消耗'\n'?而scanf("%c")呢?

在这里,我在接受的答案中看到了这个陈述:

大多数转换说明符都跳过前导空格,包括换行符但%c不跳过.

对我来说,不清楚这种不同行为的基本原理,我会期待一个统一的(例如总是跳过或从不).

我用这样的一段C代码遇到了这种问题:

#include "stdio.h"

int main(void){

    char ch;
    int actualNum;

    printf("Insert a number: ");
    scanf("%d", &actualNum);
    // getchar();

    printf("Insert a character: ");
    scanf("%c", &ch);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

交换两个scanf小号解决了问题,以及在(注释)getchar,否则'\n'该第一插入将由所述第二消耗scanf%c.我在linux和windows上测试了gcc,行为是一样的:

gcc(GCC)4.7.2 20120921(Red Hat 4.7.2-2)
版权所有(C)2012 Free Software Foundation,Inc.
这是免费软件; 查看复制条件的来源.没有保修; 甚至不适用于适销性或特定用途的适用性.

所以我的问题是:为什么%d%c行为不同WRT '\n'scanf

c scanf format-specifiers

10
推荐指数
2
解决办法
4172
查看次数

C:scanf for char无法按预期工作

我最近在我的电脑上运行了ac程序.它有一个for循环,其中扫描了一些char.for循环运行3次.在每次运行期间,它打印运行计数,然后扫描char d的值.该计划如下

#include<stdio.h>

int main(){
    int f;
    char d;
    for(f=0;f<3;f++){
        printf("Choice %d\n", f);
        scanf("%c", &d);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在麻烦的是,当我运行程序时,当f为1时,跳过scanf部分.现在,如果我更改代码如下

#include<stdio.h>

int main(){
    int f;
    int d;
    for(f=0;f<3;f++){
        printf("Choice %d\n", f);
        scanf("%d", &d);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在程序运行正常.并且forf循环的每次迭代都执行scanf.

这里的问题似乎是什么?我的意思是当d是int类型时它工作正常,但是当d是char类型时它不能正常工作.

c scanf char

0
推荐指数
1
解决办法
9786
查看次数

标签 统计

c ×3

scanf ×3

char ×1

format-specifiers ×1