我必须在C中输入char
。输入格式为:
'f' 'g'
'd' 'b'
'2' '3'
每一行都有一对两个字符,我的任务是将它们存储在两个不同的数组中。一个阵列将存储{' f'' d'' 2'},另一个阵列将存储{'',' ; b'&#39 3'}
我的代码是:
for(i=0;i<n;i++){
scanf(" %c",&arr1[i]);
scanf("%c",&arr2[i]);
}
其中n是否。行。
没有错误,但第二个数组中没有存储任何值。
答案 0 :(得分:2)
您的代码看起来很好,除了您在第二个%c
scanf
之前需要空格:
for(i=0;i<n;i++){
scanf(" %c",&arr1[i]);
scanf(" %c",&arr2[i]);
}
%c
中scanf
之前的空格可以跳过任意数量的white-spaces。如果没有它,第二个scanf
将读取空格并将其存储在arr2
中。
==&GT; Live Demo
答案 1 :(得分:1)
如果您的输入为f
,则按Enter键,然后按g
- 然后您的第二次scanf
来电将消耗字母之间的new line
。
scanf("%c", ...
将读取下一个字符(这包括空格,因此它可以读取空白字符)。
scanf(" %c", ...
将跳过空格并读入下一个非空格字符。
注意:新行('\n'
)也被视为空格。
答案 2 :(得分:0)
我的意思是,既然你已经告诉我们输入的形式就像你向我们展示的那样,那么显然有'
s和空格被丢弃。如果是这样,几乎就像你必须解析一个输入......
如果您确定输入的内容是您所描述的形式,那么一种方法是:
在每个循环上。我上面所描述的,可以使用由单个scanf
调用组成的以下块来实现,其中format-string是重要部分:
for ( ... ) {
scanf( "%*[^']'%c'%*[^']'%c'", &arr1[i], &arr2[i] );
}
这假定输入将是问题上显示的形式,单引号内的单字符,任意间隔,等等。
%*[^']'
部分处理上面列表中的第一个项目符号%c
,配对的&arr1[i]
执行第二次'
执行第三次我知道,根据提问者的评论,这不是正在寻找的东西,但我觉得至少应该有一个答案来解决问题所说的而不仅仅是提问者认为,希望它可以帮助任何人。