二维数组中缺少最后一个元素

问题描述 投票:2回答:2

代码:

#include <stdio.h>


 int main(){

    int num;

    scanf("%d", &num);
    printf("Enter: ");

    char nums[5][num], ch;

    for(int i = 0; i < num; i++){
        for(int j = 0; j < 5; j++){
            if((ch = getchar()) != '\n'){
                nums[j][i] = ch;
            }
        }
    }


    for(int i = 0; i < num; i++){
        for(int j = 0; j < 5; j++){
            printf("%c ", nums[j][i]);
        }
        printf("\n");
    }

    return 0;
 }

输出:

1
Enter: 12345
 1 2 3 4 

Process returned 0 (0x0)   execution time : 6.282 s
Press ENTER to continue.

为什么缺少最后一个元素,而在数组输出的开头缺少额外的空格?

如果将两个for循环中j的范围都更改为>

j <= 5

然后,输出看起来像这样:

1
Enter: 12345
 1 2 3 4 5 

Process returned 0 (0x0)   execution time : 2.107 s
Press ENTER to continue.

如果在printf循环中j的初始值为1,则输出看起来像这样:

1
Enter: 12345
1 2 3 4 5 

Process returned 0 (0x0)   execution time : 3.675 s
Press ENTER to continue.

在数组输出的开头没有多余的间隙。

任何人都可以解释这以及如何解决此问题吗?

代码:#include int main(){int num; scanf(“%d”,&num); printf(“ Enter:”); char nums [5] [num],ch; for(int i = 0; i ] >>

问题在于,函数getchar从输入流中读取所有字符,包括在第一次调用scanf之后存储在缓冲区中的换行符。

因此循环中读取的第一个字符是换行符'\n'。例如,您应该通过以下方式将其删除。

scanf( "%*[^\n]" );
scanf( "%*c" );

j++可以从for循环移到if的主体中。getchar返回int,因此请使用int ch而不是char

#include <stdio.h>

int main ( ) {
    int num = 0;

    scanf("%d", &num);
    printf("Enter: ");
    fflush ( stdout);

    char nums[5][num];
    int ch = 0;

    for(int i = 0; i < num; i++){
        for(int j = 0; j < 5; ){
            if((ch = getchar()) != '\n'){
                nums[j][i] = ch;
                j++;// move j++ to here
            }
        }
    }

    for(int i = 0; i < num; i++){
        for(int j = 0; j < 5; j++){
            printf("%c ", nums[j][i]);
        }
        printf("\n");
    }

    return 0;
}
c multidimensional-array 2d fflush
2个回答
2
投票

问题在于,函数getchar从输入流中读取所有字符,包括在第一次调用scanf之后存储在缓冲区中的换行符。

因此循环中读取的第一个字符是换行符'\n'。例如,您应该通过以下方式将其删除。


0
投票

j++可以从for循环移到if的主体中。getchar返回int,因此请使用int ch而不是char

© www.soinside.com 2019 - 2024. All rights reserved.