【发布时间】:2016-11-24 23:35:46
【问题描述】:
我想将poem.txt 中的其他单词大写,从每一行开始。我创建了一个函数 capitalise() 接收一个字符串(例如:“一个孤独的数字,如根三”),将每个其他单词大写并返回它(例如:返回“一个孤独的数字,如根三”)。我正在尝试从诗歌.txt 中读取每一行,将该行发送到 capitalise() 然后接收更新的字符串并用更新的字符串替换该行,但我不知道如何。我测试了我的程序,它可以读取文件的内容并将它们发送到 capitalise() 并逐行显示,但它不能写入和替换每一行。我尝试使用 fprintf() 但它不起作用。各位大神能指教一下吗?
poem.txt(执行前)
我害怕我会永远
一个孤独的数字,如根三
这三个就是好的和正确的,
为什么我的三个必须躲在视线之外
在邪恶的平方根标志下,
我希望我是九岁
因为九个可以阻止这个邪恶的把戏,
只需一些快速算术
我知道我永远不会看到太阳,就像 1.7321
这就是我的现实,可悲的非理性
听的时候!我看到的这是什么
三的另一个平方根
悄悄地走过华尔兹,
现在我们一起相乘
形成一个我们喜欢的数字,
高兴为整数
我们挣脱了凡人的束缚
随着魔杖的挥动
我们的平方根标志脱胶了
你对我的爱又更新了
代码:
#define _GNU_SOURCE
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int reverse(int otherWord)
{
if (otherWord)
return 0;
else
return 1;
}
void capitalise(char *s)
{
int start = 1;
int otherWord = 1;
for (; *s; s++)
{
if (start && otherWord)
*s = toupper(*s);
start = isspace(*s);
if (start)
otherWord = reverse(otherWord);
}
}
int main(int argc, char *argv[])
{
FILE * fp;
char * line = NULL;
size_t len = 0;
ssize_t read;
fp = fopen("poem.txt", "r+");
if (fp == NULL)
exit(EXIT_FAILURE);
while ((read = getline(&line, &len, fp)) != -1) {
capitalise(line);
fprintf(fp, "%s", line); // Here's the problem, this line!
}
fclose(fp);
if (line)
free(line);
exit(EXIT_SUCCESS);
}
poem.txt(执行后):
我害怕我会永远
我害怕我将永远是
ee
伊
三是好的和正确的,
三 一切都好 对了,
吃掉邪恶的平方根符号,
吃掉邪恶的平方根标志,
无法阻止这个邪恶的诡计,
Ne可以阻止这个邪恶的把戏,
知道我永远不会看到太阳,如 1.7321
知道我永远见不到太阳,如 1.7321
听!我看到的这是什么
听!我看到的是什么,
e
乙
s悄悄地走过华尔兹,
S静静地来华尔兹经过,
形成我们喜欢的数字,
形成我们喜欢的数字,
e挣脱我们凡人的束缚
E 摆脱我们凡人的束缚
uare根标志脱胶
Uare 根标志脱胶
编辑
poem.txt(预期执行):
我害怕我将永远是
一个孤独的数字,如根三
...
【问题讨论】:
-
您需要
fseek和ftell。阅读前通过ftell保存位置。读线。通过fseek设置位置并在写入前保存位置。
标签: c