如图,一个文件含有带回车的字符串,然后按照这个格式输出?该怎么做呢?碰到一个括号缩进两个空格
题目要求如图
是从文件读取字符串输出到控制台,还是从控制台输入字符串然后输出到文件?
#include<stdio.h>
#include<stdlib.h>
void main()
{
FILE *fp;
char ch;
int tab = 0;//缩进数量
fp = fopen("my.txt", "rt");
while (!feof(fp))
{
ch = getc(fp);
if (ch == '(')
{
tab++;
printf("%c\n", ch);
for (int i = 0;i < tab;i++)
{
printf(" ");
}
}
else if (ch ==')')
{
tab--;
printf("\n");
for (int i = 0;i < tab;i++)
{
printf(" ");
}
printf("%c\n", ch);
for (int i = 0;i < tab;i++)
{
printf(" ");
}
}
else if(ch=='[')
{
tab++;
printf("%c\n", ch);
for (int i = 0;i < tab;i++)
{
printf(" ");
}
}
else if(ch==']')
{
tab--;
printf("\n");
for (int i = 0;i < tab;i++)
{
printf(" ");
}
printf("%c\n", ch);
}
else if(ch=='\n')
{
printf("\n");
for (int i = 0;i < tab;i++)
{
printf(" ");
}
}
else
{
printf("%c", ch);
}
}
fclose(fp);
}
用getline读一行打印一行
楼主 这个是什么语言?
题主想要的是不是遇到‘[’或是‘]’就换行?
如果是的话,将从文件中读取到的内容进行字符串匹配,当匹配到‘[’就在后面加一个换行,遇到‘]’就在前面加个换行。
这样应该可以实现你要的效果吧。
楼主你要的代码,两个测试都可以通过
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int main(){
FILE* fp = fopen("a.txt","r");
int indent = 0;
assert(fp);
char c = fgetc(fp);
while(!feof(fp)){
if(c == '(' || c == '['){
indent += 2;
printf("%c",c);
printf("\n");
for(int i=0; i<indent; i++)
printf(" ");
}
else if(c == ')' || c == ']'){
indent -= 2;
printf("\n");
for(int i=0; i<indent; i++)
printf(" ");
printf("%c",c);
}
else if(c == '\n'){
printf("\n");
for(int i=0; i<indent; i++)
printf(" ");
}
else
printf("%c",c);
c = fgetc(fp);
}
return 0;
}
能给分不?