MrSkill-less 2023-12-06 11:33 采纳率: 0%
浏览 11

希望能通过如下代码实现输入n,再读入一个2n*2n的字母数组,但发现结束循环之后数组里没有保存我之前输入的字符,如何解决?(相关搜索:c语言)

初学C语言,希望能通过如下代码实现输入n,再读入一个2n*2n的字母数组,但发现结束循环之后数组里没有保存我之前输入的字符。
代码如下:

#include<stdio.h>
int main(void){
    int n,i,j;
    scanf("%d",&n);
    char a[2*n][2*n];
    for(i=0;i<2*n;i++){
        int cnt=0,j=0;
        for(cnt=0;cnt<4*n;cnt++){
            if(cnt%2==0){
                a[i][j]=getchar();
                j++;
            }
            else if(cnt%2==1&&cnt!=4*n-1){
                getchar();
            }
            else if(cnt==4*n-1){
                getchar();
                break;
            }
        }
    }
    }

实在想不明白,特来提问,感谢各位!

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-06 14:33
    关注

    【以下回答由 GPT 生成】

    #include <stdio.h>
    int main(void){
        int n, i, j;
        scanf("%d", &n);
        char a[2 * n][2 * n];
        while (getchar() != '\n'); // Clear the input buffer
    
        for (i = 0; i < 2 * n; i++) {
            for (j = 0; j < 2 * n; j++) {
                a[i][j] = getchar();
                while (getchar() != '\n'); // Clear the input buffer
            }
        }
    
        // Now the array a[] should contain the characters inputted
    }
    

    在你的代码中,主要问题是输入的字符会受到输入缓冲区的影响。为了解决这个问题,你可以使用while循环清空输入缓冲区,然后直接读取字符填充到数组中。另外,你在外层循环中使用了i和j两个不同的循环变量,这会导致混淆,应该避免这样的情况。

    我帮你修改了代码,使用了清空输入缓冲区的while循环,并直接在内循环中读取字符填充到数组中。希望这可以解决你的问题。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 12月6日