#c
Вопрос:
Я пишу программу entab, которая заменяет строки пробелов минимальным количеством вкладок и пробелов для достижения одинакового расстояния .( Я использовал _ для замены пробелов, чтобы изменения были видны на выходе)
#include<stdio.h>
#include<string.h>
#define TABVAL 8
#define MAXLINE 1000
int Getline_entab(char Line[]) ;
int main(void)
{
char Line[MAXLINE] ;
while(Getline_entab(Line) > 1)
{
printf("nAltered Lines :-%s" , Line) ;
}
return 0 ;
}
int Getline_entab(char Line[])
{
char c_input ;
int index = 0 ;
int noblanks = 0 ;
while((c_input = getchar()) != 'n' amp;amp; c_input != EOF amp;amp; index < (MAXLINE - 1))
{
if(c_input == ' ')
{
if((index 1) % TABVAL == 0)
{
Line[index] = 't' ;
noblanks = 0;
}
else
{
noblanks ;
}
}
else
{
for(; noblanks > 0 ; noblanks--)
{
Line[index - noblanks] = '_';
}
Line[index] = c_input ;
}
index ;
}
if(c_input == 'n')
{
Line[index] = 'n' ;
Line[ index] = '' ;
}
else
Line[ index] = '' ;
return index ;
}
выход —
Premier foot k
Premier __foot
Первая строка-это вход, а вторая строка-выход
Но при использовании цикла для печати печатается полное предложение , но оно не печатается при использовании printf или puts . Я был бы признателен за вашу помощь в понимании того, где я ошибся
Комментарии:
1. По какой причине вы не ставите символ новой строки в конце своего
printf
?2. К сожалению, это кажется логической ошибкой. Для входа
Pre mier foot k
, выход естьPre_mier___foot __k
.3. Обычно лучше избегать использования вкладок, поскольку их форматирование зависит от среды пользователя.
4. @WeatherVane, код выглядит как попытка создать визуализатор мест, где можно использовать символы табуляции (вероятно, для уменьшения размера файла), поэтому я думаю, что ваш комментарий выходит за рамки. Это было немного усложнено, но это причина, по которой я пришел сюда за ПО. Это обычное упражнение для начинающих (для создания таббера и программы детаббера).
5. @LuisColorado я вижу, но в моем текстовом редакторе на данный момент установлен размер вкладки 4. Таким образом, 8 пробелов в файле операции будут отображаться здесь только 4 пробела.
Ответ №1:
Потребовалось некоторое время, но в конце концов все было сделано.
#include<stdio.h>
#include<string.h>
#define TABVAL 8
#define LIMIT 1000
int Getline_entab(char Line[]) ;
int main(void)
{
char Line[LIMIT] ;
while(Getline_entab(Line) > 1)
{
printf("nAltered Lines :-%s" , Line) ;
}
return 0 ;
}
int Getline_entab(char Line[])
{
char c_input ;
int index = 0 ;
int noOfBlanks = 0 ;
while((c_input = getchar()) != 'n' amp;amp; c_input != EOF amp;amp; index < (LIMIT - 1))
{
if(c_input == ' ')
{
noOfBlanks ;
if(noOfBlanks == TABVAL)
{
index -= TABVAL - 1;
Line[index] = '#' ;//Tab insertion
noOfBlanks = 0;
}
}
else
{
for(; noOfBlanks > 0 ; noOfBlanks--)
{
Line[index - noOfBlanks] = '_';//Blank insertion
}
Line[index] = c_input ;
}
index ;
}
if(c_input == 'n')
{
Line[index] = 'n' ;
Line[ index] = '' ;
}
else
Line[ index] = '' ;
return index ;
}
Tab
s были заменены на #
s, а пробелы-на _
s для лучшей читаемости.
Некоторые из ваших имен переменных также были изменены.
Ввод Образца
Hello Hi Bye Bye
Premier foot k
Пример Вывода
Altered Lines :-Hello_Hi#__Bye#Bye
Altered Lines :-Premier#foot____k
Комментарии:
1. Спасибо за помощь !!! Я думал, что никогда не получу ответа, но ты мне помогла . Еще раз спасибо