我已经获得了一个任务问题,到目前为止我已经成功解决了这个问题,除了在几个(输入确定的)字符之间分割剩余值之外。 任何帮助将不胜感激。 作为参考,我的任务问题是:
"如果你看一份报纸,你会看到写作是合理的,以适应列。编写一个程序,读取报纸中列的宽度,然后读取一行文本。将文本行对齐以适合该宽度的列。程序运行时,屏幕应如下所示:
Enter the width of the column: 40 Enter a line of text: Good morning how are you? 12345678901234567890123456789012345678901234567890... Good morning how are you?
通过计算文本中的空白数量来完成辩护。在上面的例子中,有4个空白。然后每个间隙必须添加空格。必须尽可能均匀地分享额外空格的数量。在上面的例子中,前三个间隙各有5个空格,最后一个间隙有4个空格。
注意:
"
到目前为止,我的代码是:
int main() {
//input column width
printf("Enter the width of the column: ");
int column;
scanf("%d", &column);
//input text line
printf("Enter a line of text: ");
char string[80];
getchar();
gets(string);
//print 1234567890 column header
int y = 1,x = 0;
while(x < column){
if(y > 9){
y = 0;
}
printf("%d", y);
y++;
x++;
}
printf("\n");
//count spaces
int i = 0;
int space_count = 0;
while(string[i] != '\0'){
if(string[i] == 0x20){
space_count++;
}
//printf("%c", string[i]);
i++;
}
//work out variables
int string_length = i;
int remainder_space = (column - string_length);
int space_power = (remainder_space / space_count);
//int oddremainder = (space_count % remainder_space) ;
//space_power = (space_power + oddremainder);
//if
//remainder %
//insert column width check
if(string_length > column)
{
printf("Text is too long. Shouldn't be more than %dcharacters\n",
column);
return 1;
}
//output
i = 0;
while(string[i] != '\0'){
if(string[i] == 0x20){
for(x = 0; x < space_power; x++){
printf("%c", 0x20);
}
}
printf("%c", string[i]);
i++;
}
对不起,如果这不是提问的适当方式,我的大脑就会被炸掉,我无法理解这一点。 任何指示或在正确方向上的讨论将不胜感激。
答案 0 :(得分:0)
让我们看看这个例子。它有19个空间可以填充4个空隙。如果您的代码运行如此,space_power
的值将为4(int(19/4)),最后会留下3个空格。你需要跟踪19%4,即。 3个额外的空间。
因此,保持计数,最初等于3.然后,当此计数大于0时,打印一个额外的空格以及所有space_power
个空格。每次打印单词时减少计数。
您的代码将是这样的:
count = remainder_space % space_count;
和输出块:
i = 0;
while(string[i] != '\0'){
int k = count > 0 ? 1 : 0;
if(string[i] == 0x20){
for(x = 0; x < space_power + k; x++){
printf("%c", 0x20);
}
count--;
}
printf("%c", string[i]);
i++;
}