检查输入中的换行符

时间:2014-03-19 03:51:05

标签: c matrix newline

代码:

printf("Enter your data (5x10) of characters: \n");
for (i = 0; i < SIZE1; i++)
for (j = 0; j < SIZE2; j++)
    scanf("%c", &matrix2[i][j]);
compress(matrix2);
break;

我的代码假设接受一个5 x 10字符的char。但是目前我的换行符正在输入到矩阵中,我如何实际检查换行符,并阻止它进入matrix2[i][j]

它总共读取了4个换行符。 输入:

aaabbbcccd (press enter)
ababababab (press enter)
bcdbcdbcdb (press enter)
ababababab (press enter)
abbbcccdda

4 个答案:

答案 0 :(得分:6)

您可以在%c说明符之前添加空格,例如

scanf(" %c", &matrix2[i][j]);

格式字符串中的空格告诉scanf()跳过任何前导空格或换行符,因此消耗了使用%c转换说明符键入的下一个字符。

您的情况正在发生,因为当您(press enter)时,下一个scanf()来电正在消耗留下的新换行符\n,因此会使您的陈述失败。

答案 1 :(得分:4)

添加空格:

scanf(" %c", &matrix2[i][j]);
       ^

空间(不直观地)消耗任何空白区域,包括\n。但是这种变化意味着您无法在matrix中添加空格,这可能是您想要的,也可能不是。

但通常最好使用例如<{1}}和fgets()而不是sscanf()来解析输入。

答案 2 :(得分:2)

char matrix2[SIZE1][SIZE2];
int ch, count, end, i, j;
char  *p = &matrix2[0][0];

printf("Enter your data (5x10) of characters: \n");
count = 0; end = SIZE1 * SIZE2;
while (EOF!=(ch=fgetc(stdin)) && count < end){
    if(ch == '\n')
        continue;
    p[count++] = ch;
}

答案 3 :(得分:1)

您可以将i / p字符存储在虚拟变量中,然后检查它是空格还是/ n。 即

printf("Enter your data (5x10) of characters: \n");
for (i = 0; i < SIZE1; i++)
for (j = 0; j < SIZE2; j++)
{
  d:  scanf("%c", &a);
      if(a!=' '||a!='\n')
          matrix2[i][j]=a;
      else
          goto d;
}

compress(matrix2);
break;