将输入的字符存储在数组中

时间:2014-07-01 17:30:42

标签: c arrays string

我必须在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是否。行。

没有错误,但第二个数组中没有存储任何值。

3 个答案:

答案 0 :(得分:2)

您的代码看起来很好,除了您在第二个%c scanf之前需要空格:

for(i=0;i<n;i++){ 
   scanf(" %c",&arr1[i]); 
   scanf(" %c",&arr2[i]);
}  

%cscanf之前的空格可以跳过任意数量的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]执行第二次
  • '执行第三次
  • 休息第四次

我知道,根据提问者的评论,这不是正在寻找的东西,但我觉得至少应该有一个答案来解决问题所说的而不仅仅是提问者认为,希望它可以帮助任何人。