我试图通过C编程语言书籍和即时通讯练习1-21,在那里你必须用适当数量的制表符和空格替换空格的块,以等于相同的空间,我能够让所有的东西都能正确运行和编译,但它会在输出中输入错误的制表符和空格。练习1-21 C编程语言
从本书中的实际问题:
写一个程序entab由最低 号标签和空白的空格替换字符串来实现相同的间距。与detab一样使用相同的 制表位。当选项卡或单个空白 就足以达到制表位,哪个应该给予优先?
再次,伙计们对编程仍然很陌生,所以请尽可能描述一下。
if I input something like asdf asdf asdf
i get something like----- asdf asdf asdf back out.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BUFFER 1024
#define SPACE ' '
#define TAB '\t'
#define TabSize 4
int main()
{
int c, i, j, spaces = 0, size, tempspaces, x, y, z;
int tabs = 0;
char arrayPrimary[MAX_BUFFER];
char arraySecondary[MAX_BUFFER];
/* ********************************************************************** */
for(i = 0;(c = getchar()) != EOF && c != '\n'; i++)
{
arrayPrimary[i] = c;
}
arrayPrimary[i] = '\0';
size = i;
printf("%s\n", arrayPrimary);
/* ********************************************************************** */
for(i = 0, j = 0, tempspaces = 0; i < size; i++)
{
if(arrayPrimary[i] == SPACE)
{
tempspaces++;
}
else
{
arraySecondary[j] = arrayPrimary[i];
j++;
}
if(tempspaces > 0 && arrayPrimary[i + 1] != SPACE)
{
spaces = tempspaces % TabSize;
printf("Spaces %i\n", spaces);
tabs = ((tempspaces - spaces)/TabSize);
printf("Tabs %i\n", tabs);
for(y = 0; y <= spaces; y++)
{
arraySecondary[j] = SPACE;
j++;
}
for(x = 0; x <= tabs; x++)
{
arraySecondary[j] = TAB;
j++;
}
tabs = 0;
spaces = 0;
tempspaces = 0;
}
}
arraySecondary[j + 1] = '\0';
printf("%s\n", arraySecondary);
return 0;
}
您在示例输入中说“类似”。这些是_exact_输入和输出,还是你只是输入“类似”他们?你如何查看输出结果?大多数终端的标签大小默认为8,但您的代码具有“TabSize 4”。 – Arkku