我正在尝试设计一个程序来接收我们的消息,并在每一行中保留特定数量的字符(已完成)。按顺序保留字符后,我试图打印每列的第一个字母并将其打印成一行,然后移到第二列并在下一行中打印这些字符,依此类推。 我可以使用此代码打印第一列,但我不知道如何移动到下一列。有什么建议?
#include <stdio.h>
int main(void)
{
int row = 0 ;
int i = 0 ;
char message[256] ;
scanf( "%d", &row );
fgets( message, sizeof(message), stdin ) ;
while( message[i] != '\0' )
{
putchar( message[i] ) ;
i++ ;
if( i % row == 0 )
{
putchar( '\n' ) ;
}
i=i+row-1;
}
return 0;
}
答案 0 :(得分:0)
解决问题的更正代码是:
#include <stdio.h>
#include <string.h>
int main(void)
{
int row = 0 ;
int i = 0 ;
int j=0,length=0;
char message[256] ;
scanf( "%d", &row );
fgets( message, sizeof(message), stdin ) ;
length = strlen(message);//stores the length of the array.
for(j=1;j<=row;j++)
{
while( i < length )//use this condition in the while loop instead of (message[i]!='\0') in this case.
{
putchar(message[i]) ;
i=i+row;
}
printf("\n");
i=j;
}
return 0;
}
注意,由于你在while循环中使用静态数组和条件(message [i]!='\ 0'),在大多数情况下你的代码需要访问超出数组长度的数组元素可以调用未定义的行为。使用动态数组或更改while循环中的条件将防止此类错误。 此外,如果您已将所有行存储在二维数组中,然后将每列显示在一行中,则也可以解决此问题。