在输出中不打印最后一个字符。
Input: 3 3
abcabcabc
Expected Output: a b c a b c a b c
Actual Output: a b c a b c a b
c ???在哪里
#include <stdio.h>
int main() {
int i,j,k,n;
char a[3][3],b[3][3];
printf("enter size\n");
scanf("%d %d",&n,&k);
printf("enter character \n");
for(i=0;i<n;i++)
for(j=0;j<k;j++)
scanf("%c",&a[i][j]);
printf("\n");
for(i=0;i<n;i++)
for(j=0;j<k;j++)
printf("%c ",a[i][j]);
return 0;
}
答案 0 :(得分:5)
此scanf()
来电:
scanf("%d %d",&n,&k);
在输入缓冲区中留下一个换行符char(\n
),后续读取chars in循环。这就是为什么它需要少一点输入。
您可以添加:
int c;
while((c = getchar()) != '\n' && c != EOF);
在scanf("%d %d",&n,&k);
之后忽略它。但人们普遍认为scanf()
并不适合这种输入阅读。因此,您最好使用fgets()
然后解析它。
相关:Why does everyone say not to use scanf? What should I use instead?
答案 1 :(得分:0)
#include <stdio.h>
int main() {
int i,j,k,n;
char a[3][3],b[3][3];
printf("enter size\n");
scanf("%d %d",&n,&k);
printf("enter character \n");
fflush(stdin);
for(i=0;i<n;i++)
for(j=0;j<k;j++)
scanf("%c",&a[i][j]);
printf("\n");
for(i=0;i<n;i++)
for(j=0;j<k;j++)
printf("%c ",a[i][j]);
return 0;
}
添加fflush(stdin)以通过scanf清除输入缓冲区中的上一个换行符char(\ n)。