在C中将字符串扫描成2D数组

时间:2014-04-11 04:53:37

标签: c string multidimensional-array

我需要输入用户输入的20个单词,将它们放入2D数组并打印出来 我目前的代码是

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▒(&lt;▒▒t/▒▒▒(5h▒tr:▒(                                                 qh▒tdle__000 HW5.exe▒`wauld▒(▒&安培;奥斯特,▒*a▒+a▒▒

以至于需要一些滚动才能回到程序的开头

我在这个程序中有更多的东西不在我的问题中,但我99%肯定它不会弄乱我在这里的东西,但如果你想看到其余的只是问

我确实刚开始编程,所以我不知道是不是已经蹲下来了,所以如果你能在回答时记住这一点,这也是为了学校作业所以它不需要是完美的它只需要完成工作

感谢无论谁回答这个问题,我一直在努力解决这个问题

2 个答案:

答案 0 :(得分: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]);

答案 1 :(得分:0)

将数组初始化为0:

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

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

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