我想從每行開始在poem.txt中大寫其他每個單詞。我做了一個函數capitalize(),它接收一個字符串(例如:「一個像根三的孤獨數字」),大寫其他每個單詞並返回它(例如:返回「一個孤獨的數字像根三」)。我試圖從poem.txt讀取每行,將該行發送到大寫(),然後接收更新的字符串,並用更新的字符串替換該行,但我無法弄清楚如何。我測試了我的程序,它可以讀取文件的內容,並將它們發送到大寫()並逐行顯示,但無法寫入和替換每行。我嘗試使用fprintf(),但它不工作。你們能開導我嗎?使用C替換文本文件中的每一行C
一下poem.txt(執行前)
我擔心,我會永遠
一個孤獨的數字,如根3
三是所有的美好和正義,
爲什麼一定要我三看不見
在惡性方根符號下面,
我希望改爲我是一個九
九個會阻礙這個邪招,
只用一些簡單的算術
我知道我永遠也看不到太陽,爲1.7321
這就是我的現實,一個可悲的非理性
當徐克!這是什麼我看到,
的三
另一個平方根已悄然來臨華爾茲通過,
在一起,現在我們乘
形成一批我們願意,
大喜爲整數
我們從我們凡人的債券中掙脫
隨着魔棒的浪潮
我們的平方根s igns成爲脫膠
你對我的愛已續簽
代碼:
#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);
}
詩。TXT(執行後):
我擔心,我會永遠
我擔心,我會一直
EE
的Ee
三是所有的美好和正義,
3是所有這是好的和正確的,
eath惡性平方根標誌,
艾比的Viciou廣場根號,
NE可阻止這個邪惡的伎倆,
NE可挫敗這個邪招,
知道我永遠也看不到太陽,爲1.7321
知道我永遠不會看到太陽,作爲1.7321
en hark!這是什麼我看,
恩哈克!這是什麼我明白了,
Ë
Ë
靜靜地進來華爾茲通過,
靜靜地來華爾茲通過,
形式的數量,我們願意,
表格,我們更喜歡號碼,
從我們的凡人債券中解脫出來
E破解我們的凡間債券
uare根號被掀開
Uare根號被掀開
EDED
一下poem.txt(預期執行):
我擔心,我會一直
一個孤獨的號碼,例如根三
...
你需要'fseek'和'ftell'。讀取前用'ftell'保存位置。讀線。在寫之前用'fseek'設置位置並保存位置。 – BLUEPIXY