代码:
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
答案 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;