我需要输入用户输入的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%肯定它不会弄乱我在这里的东西,但如果你想看到其余的只是问
我确实刚开始编程,所以我不知道是不是已经蹲下来了,所以如果你能在回答时记住这一点,这也是为了学校作业所以它不需要是完美的它只需要完成工作
感谢无论谁回答这个问题,我一直在努力解决这个问题
答案 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");
}