如何在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);
}
每当我尝试使用
读取输入时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);
}