Это моя версия detab от этого упражнения K & R:
Измените detab, чтобы принимать список табуляций в качестве аргументов. Используйте настройку вкладки по умолчанию, если аргументов нет.
#include <stdio.h>
#include <stdlib.h>
#define TAB_STOP 8
/* replaces tabs from input with the proper amount of blank spots */
int Detab()
{
int c, x;
int column;
x = column = 0;
while((c=getchar())!=EOF)
{
if(c == '\n') /* reseting counter if newline */
{
putchar(c);
return 1;
}
else if(c!='\t') /* column counts places to tab spot */
{
putchar(c);
column++;
if(column == TAB_STOP)
column = 0;
}
else /* tab */
{
for(x=0; x<TAB_STOP - column; x++)
putchar('_');
column = 0;
}
}
return 0;
}
int main(int argc, char *argv[])
{
int valid;
while((valid=Detab())!=0);
printf("Press any key to continue.\n");
getchar();
return 0;
}
У меня вопрос: есть ли более одного аргумента - например, 5, 8, 10 - когда следующая остановка на вкладке должна стать активной? В какой момент программа должна начать использовать TAB_STOP 8 вместо начальных 5? После новой строки или как мне это сделать?
Я также не совсем уверен, должен ли я все это поместить в основную, или я должен придерживаться отдельной функции?
Редактировать: хорошо, это то, что я пытался.
#define MAX_ARGUMENTS 100
int main(int argc, char *argv[])
{
int i, val = 0;
int nums[MAX_ARGUMENTS];
int x = 0;
for(i = 1; i < argc; i++) {
while(isdigit(*argv[i])) {
val = val * 10 + *argv[i] - '0';
*++argv[i];
}
nums[x++] = val;
val = 0;
}
Detab(nums);
printf("Press any key to continue.\n");
getchar();
return 0;
}
Я на правильном пути? Может ли это работать? Я до сих пор не изменил detab.