【问题标题】:Two dimensional character array二维字符数组
【发布时间】:2016-08-26 08:44:14
【问题描述】:

在输出中最后一个字符没有被打印出来。

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

【问题讨论】:

  • 始终检查来自scanf 的返回值,例如if (2 != scanf("%d %d",&amp;n,&amp;k)) { ... error handling ....}

标签: c arrays character


【解决方案1】:

scanf() 电话:

 scanf("%d %d",&n,&k);

在输入缓冲区中留下一个换行符(\n),由后续在循环中读取字符的地方读取。这就是为什么它需要更少的输入。

您可以添加:

int c;
while((c = getchar()) != '\n' && c != EOF);

scanf("%d %d",&amp;n,&amp;k); 之后忽略它。但普遍认为scanf() 不适合这种输入读取。所以,你最好使用fgets() 然后解析它。

相关:Why does everyone say not to use scanf? What should I use instead?

【讨论】:

    【解决方案2】:
    #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 清除输入缓冲区中的前一个换行符 (\n)。

    【讨论】:

      猜你喜欢
      • 2017-02-19
      • 2019-01-23
      • 2021-06-12
      • 2016-05-06
      • 2017-04-16
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多