gpt4 book ai didi

c - 我该如何处理下面代码中的\n(换行符)

转载 作者:行者123 更新时间:2023-11-30 14:41:35 24 4
gpt4 key购买 nike

#include<stdio.h>
#include <stdlib.h>
#include<stdbool.h>
int lines;
void m_cmnt(FILE *fp)
{
int prev = 0;
int ch;
while ((ch = getc(fp)) != EOF)
{
if (prev == '*' && ch == '/')
{
return;
}
else
{
prev = ch;
}
}
fprintf(stderr, "error in line %d: unterminated comment\n", lines+1);
}

int main ( int c , char **arr )
{
FILE *fp , *np ;
int ch , prev ;
lines = 0;
bool String=0 ;

fp = fopen("test.txt", "r") ;
np = fopen("temp.txt" , "w") ;

if (fp==NULL )
{
printf ("Invalid/No Filename given as Argument ! \n") ;
return 1 ;
}

while ((ch=getc(fp))!=EOF )
{
if (ch == '\n')
lines++;

/* file pointer currently not inside a string */
if ( !String )
{
if ( ch=='/' )
{
prev=ch ;
ch= getc(fp) ;
switch(ch)
{
case '*' : /*if(ch != 'a')
putc('h', np);*/
m_cmnt( fp) ;
putc(' ', np);
break ;
default :
putc(prev , np) ;
putc(ch , np) ;
break ;
}
}
else putc( ch ,np ) ;
}
else putc(ch , np) ;

if ( ch=='\"' || ch=='\'')
String = !String ;
prev = ch ;

}

fclose(fp) ;
lines++;
printf("line = %d", lines);
fclose(np) ;
//remove(arr[1]) ;
//rename( "temp.txt" , arr[1] ) ;
return 0 ;
}

我和我的 friend 正在做一个 self 挑战项目,上面的代码是一个从“test.txt”文件中删除注释并将非注释部分写入temp.txt文件的程序。它仅适用于多评论(有意)。

我试图处理\n 字符以在注释内部和注释外部出现时创建新行。例如 line1\nline2 应在不同的行中导出。另外 line1/*comm\nent*/line2 也应该在不同的行中导出(写入)。但是,如果转义字符出现在字符串或字 rune 本中,则应将其视为普通字符串或字符。

最佳答案

a program that removes comment(s)

代码需要一种新的方法来稳健地处理诸如 "\"""\'"'\"''\''//'/* "*/"//"

一般来说,至少有 5 种状态:正常、"" 字符串、'' 常量、/* */ 注释,在 //eol 注释中。

建议重新设计算法。

// Pseudo code
while ((c=get()) != EOF) {
if (c == ''') process_quote();
else if (c == '"') process_double_quote();
else if (c == '/') {
next = fgetc()
switch (next) {
case '*': process_slash_star_comment();
case '/': process_slash_slash_comment();
default: unget(next); put('/');
else put(c)
}

如果代码执行类似 #define x// 的操作,所有的赌注都会被取消。

关于c - 我该如何处理下面代码中的\n(换行符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54855204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com