【问题标题】:Scanning in strings into a 2D array in C在 C 中将字符串扫描成二维数组
【发布时间】:2014-04-11 04:53:36
【问题描述】:

我需要输入用户输入的 20 个单词,将其放入二维数组并打印出来 我当前的代码是

char array2[20][20];
int i;
for(i=0;i<20;i++)
{
    printf("enter a word\n");
    scanf(" %[^\n]",array2[i]);
}

for(i=0;i<colsize2;i++)
{
    printf("\n");
    for(j=0;j<rowsize2;j++)
    {
        printf("%c",array2[i][j]);
    }
}

(我不知道 %[^\n] 是什么,但它比 %c 或 %s 更好用)

没有编译器错误,程序将运行,但是当它在输入所有单词后打印数组时,我得到的只是完整的垃圾

喜欢

aȪ(M▒awn-US▒ e▒(

如此之多,以至于需要滚动一点才能回到我的程序的开头

我在这个程序中确实有更多不在我的问题中的内容,但我 99% 确信它不会与我在这里的内容混淆,但如果您确实想查看其余内容,请询问

我真的刚开始编程,所以我还不知道是否对它深陷其中,所以如果你在回答时能记住这一点,这也是学校作业,所以它不需要完美,它只需要完成任务

感谢回答这个问题的人,我已经为此努力了好几个小时

【问题讨论】:

    标签: c string multidimensional-array


    【解决方案1】:

    格式字符串

    " %[^\n]" 
     ^ note the leading space
    

    表示scanf 将首先读取并丢弃任意数量的前导空白字符,然后匹配包含换行符的任何字符序列。如果输入字符串对于调用未定义行为的缓冲区而言太大,scanf 可能会超出将字符串保存到的缓冲区。 %s 格式说明符意味着 scanf 跳过前导空白字符并读取输入字符串,直到遇到空白,此时它将终止的空字节附加到它写入的缓冲区,然后返回。

    因此,你需要的是

    char array2[20][20];
    int i;
    
    for(i = 0; i < 20; i++)
        scanf("%19s", array2[i]);
    
    for(i = 0; i < 20; i++)
        printf("%s\n", array2[i]);
    

    【讨论】:

    • 谢谢兄弟!你能帮我知道如何动态地做到这一点吗?
    【解决方案2】:

    将你的数组初始化为 0:

    char array2[20][20] = { 0 } ;
    

    然后打印字符串不是每个字符:

    for(i=0;i<20;i++)
    {
        printf("%s",array2[i]);
        printf("\n");
    }
    

    【讨论】:

    • 谢谢它的工作,虽然显然我有一个名为 GCC bug 53119 的错误(它在另一个 Stackoverflow 问题上)它仍然有效,但我得到一个编译器错误,但我能解决,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多