printf не полностью печатает строку(нет, это не из-за scanf или не с помощью функции scanset)

#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. Спасибо за помощь !!! Я думал, что никогда не получу ответа, но ты мне помогла . Еще раз спасибо