我試圖通過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