如何在for循环中使用scanf

How to use scanf in for loop

每当我尝试使用

读取输入时
for (int i = 1; i <= 10; ++i) {
    scanf("(%c, %d, %d, %d)",&charv,&intv1,&intv2,&intv3);
}

我只到达 scanf() 一次。有什么问题吗?

输入 -> (P, 1, 2, 3)......(P, 2, 3, 12)

您对 scanf() 的用法是错误的。您必须提供 指向变量 的指针来存储 scanf() 读取的值。你需要像下面这样使用它

for (int i = 1; i <= 10; ++i) {
    scanf("%c, %d, %d, %d",&charVar,&intvar1,&intVar2,&intVar3);
}

编辑:

要点 1:提供的格式字符串完全 与输入匹配。否则,scanf() 将失败。如果您的输入不是格式 (<char>, <int>.... ,它将失败。缺少 (), 中的任何一个都会导致提供的格式字符串与输入不匹配,并使 scanf() 停止扫描。强烈建议检查 scanf() 的 return 值以确保成功。

要点 2:为了避免读取之前按下 ENTER<\kbd> 键存储的 \n,您应该在 %c 之前添加前导 space。所以,你可以使用类似

scanf(" %c, %d, %d, %d",&charVar,&intvar1,&intVar2,&intVar3);
       ^
       |
     Notice here
scanf("(%c, %d, %d, %d)",&charvar,&intvar1,&intvar2,&intvar3);

应该是

scanf(" %c, %d, %d, %d",&charvar,&intvar1,&intvar2,&intvar3);

注意 %c 之前的 space 如果存在换行符,它会忽略它。如果您的输入没有用逗号分隔

scanf(" %c %d %d %d",&charvar,&intvar1,&intvar2,&intvar3);

正如 Sourav Ghosh 和 Gopi 所说,scanf 将无法使用此语法正常工作

scanf("(%c, %d, %d, %d)",&char,&int,&int,&int);

应该是

scanf("%c %d %d %d",&char,&int,&int,&int);

但是你可以先读取一个字符串,然后再使用sscanf。

试试这个代码:

char ch;
int a, b, c, i;

char teste[256];

for(i=0;i<10;i++){
    fgets(teste, 256, stdin);
    sscanf(teste, "(%c, %d, %d, %d)", &ch, &a, &b, &c);
    printf("%c %d %d %d\n", ch, a, b, c);
}