如何在for循环

时间:2015-04-22 12:20:12

标签: c input formatting scanf

每当我尝试用

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

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

输入 - &gt; (P,1,2,3)......(P,2,3,12)

3 个答案:

答案 0 :(得分:2)

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

应该是

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

请注意%c之前的空格,如果存在则忽略换行符。如果您的输入未以逗号分隔

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

答案 1 :(得分:1)

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

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

编辑:

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

第2点:为避免阅读上一个ENTER&lt; \ kbd&gt;所存储的\n按键,您应该在%c之前添加一个前导空格。所以,你可以使用像

这样的东西
scanf(" %c, %d, %d, %d",&charVar,&intvar1,&intVar2,&intVar3);
       ^
       |
     Notice here

答案 2 :(得分:1)

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