【发布时间】:2016-01-20 14:22:28
【问题描述】:
我是 FILE I/O Stream 的新手,我想编写一个程序,将“ä,Ä,ü,Ü,ö,Ö”等字符(从“texti.txt”读取)转换为“ae” ,Ae,ue,Ue,oe,Oe”并将它们写入一个名为“texto.txt”的新文件中。
第一个问题: 可以像我一样同时拥有两个文件指针(指向每个文件)吗?
第二个问题: 我在 switch 语句中的字符比较做错了什么? VS2015警告案例2和3已经存在(参考案例1)
第三个问题
fpo(指向输出文件的文件指针)是否会通过写入字符自动递增?
问题四: VS2015 警告:
C4996 'fopen':此函数或变量可能不安全。考虑改用 fopen_s。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅在线帮助。
我应该使用其他功能吗?
int main()
{
char c;
FILE *fpi;
FILE *fpo;
fpi = fopen("texti.txt","r");
fpo = fopen("texto.txt", "w");
if (fpi == NULL)
fprintf(stderr, "Fehler beim Lesen");
while (!feof(fpi))
{
c = fgetc(fpi);
switch (c)
{
case 'ä'||'Ä':
fputc('a', fpo);
fputc('e', fpo);
break;
case 'ö'||'Ö':
fputc('o', fpo);
fputc('e', fpo);
break;
case 'ü' || 'Ü':
fputc('u', fpo);
fputc('e', fpo);
break;
default:
fputc((c), fpo);
}
fpi++;
}
fclose(fpi);
fclose(fpo);
}
【问题讨论】:
-
你怎么看,
fpi++;会怎么做?此外,c应该是int,并且您不会检查第二个fopen的结果。 -
一次一个问题。
-
foef执行 not work 显然是您所期望的。还要小心非 ASCII 字符编码。这很可能不会按预期工作。至少你需要char16_t或char32_t堡垒。 -
@classMate 是的。它将继续这样做,直到您看到一个 EOF(在您阅读完最后一个字符后您会开始阅读,我认为您使用
feof是不正确的 -feof只有在您阅读了一个EOF,这对于您的循环来说太晚了)。在内部,打开文件的控制信息(由 FILE 指针指向)会自动更新并跟踪您的位置。您可能想在 Google 中搜索“C 中的文件 I/O”以获取一些示例。