每当我尝试用
读取输入时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)
答案 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);
}