二维字符数组

时间:2016-08-26 08:44:15

标签: c arrays character

在输出中不打印最后一个字符。

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;
}

2 个答案:

答案 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)。