printf未完全打印字符串(否不是因为scanf或未使用scanset函数)

printf未完全打印字符串(否不是因为scanf或未使用scanset函数),c,C,我正在编写一个程序entab,它用最少的制表符和空格来替换空格串,以达到相同的间距。(我使用u替换空格,以便在输出中可以看到更改) 第一行是输入,第二行是输出 #include<stdio.h> #include<string.h> #define TABVAL 8 #define MAXLINE 1000 int Getline_entab(char Line[]) ; int main(void) { char Line[MAXLINE] ; wh

我正在编写一个程序entab,它用最少的制表符和空格来替换空格串,以达到相同的间距。(我使用u替换空格,以便在输出中可以看到更改)

第一行是输入,第二行是输出

#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' && c_input != EOF && 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] = '\0' ;
        }
        else
          Line[++index] = '\0' ;
    return index ;
}

但在使用循环打印时,会打印完整的句子,但在使用printf或put时不会打印。如果您能帮助我了解我的错误所在,我们将不胜感激。

花了一些时间,但最终还是解决了

#包括
#包括
#定义TABVAL 8
#定义限制1000
int Getline_entab(字符行[]);
内部主(空)
{
字符行[限制];
而(Getline_entab(Line)>1)
{
printf(“\n分析行:-%s”,行);
}
返回0;
}
int Getline_entab(字符行[])
{
字符c_输入;
int指数=0;
int noOfBlanks=0;
而((c_input=getchar())!='\n'和&c_input!=EOF和&index<(LIMIT-1))
{
如果(c_输入=“”)
{
noOfBlanks++;
if(noOfBlanks==TABVAL)
{
索引-=TABVAL-1;
行[索引]='#';//插入制表符
noOfBlanks=0;
}   
}
其他的
{
对于(;无网格>0;无网格--)
{
行[index-noOfBlanks]='';//空白插入
}
行[索引]=c_输入;
}
索引++;
}
如果(c_输入=='\n')
{
行[索引]='\n';
第[++行索引]='\0';
}
其他的
第[++行索引]='\0';
收益指数;
}
选项卡
s已替换为
#
s,空格替换为
s,以提高可读性。 您的一些变量名也已更改

样本输入 样本输出
您为什么不在
printf
末尾添加换行符?不幸的是,这似乎是一个逻辑错误。对于输入
Pre-mier-foot k
,输出是
Pre-mier-foot\uu-foot\uu-k
。通常最好避免使用选项卡,因为它们的格式取决于用户的环境。@WeatherVane,该代码看起来像是在尝试创建一个可以使用选项卡字符的地方的可视化工具(可能是为了使文件更小)所以我认为你的评论超出了范围。这有点过于复杂了,但这就是来这里看PO的原因。这是初学者的常见练习(制作tabber和detabber程序)@LuisColorado我明白了,但我的文本编辑器目前设置为tab大小为4。所以OP文件中的8个空格在这里只显示4个空格。谢谢你的帮助!!!我以为我永远也得不到答案,但你帮了我。再次感谢
Premier   foot   k
Premier __foot
Hello Hi          Bye        Bye
Premier        foot    k

Altered Lines :-Hello_Hi#__Bye#Bye

Altered Lines :-Premier#foot____k