gpt4 book ai didi

c - 使用 fscanf 在 c 中读取文件

转载 作者:行者123 更新时间:2023-11-30 15:46:18 25 4
gpt4 key购买 nike

我正在上 C 编程类(class),我有一个项目,他们给了我们一个半成品项目,我们需要完成它并修复一些功能。这个项目是关于社交网络的。在这个项目中,您可以通过编写目标用户然后输入消息来向其他用户(目前在同一台计算机上)发送消息。然后,消息将以以下格式保存在同一文件夹中名为“messages.txt”的文件中:“[于]2013 年 8 月 25 日 [发件人]user1 [收件人]user2 [消息]你好,最近怎么样?”“[在]日期[发件人]用户[收件人]用户2[消息]任何用户输入”现在写完这篇文章后,我转到第二个用户并尝试使用此函数从文件中读取:

void showUnreadMessages(char* userName) // the function gets the name of the current 
user that wishes to read his/hers messages
{
char msg[MAX_MESSAGE];
char toU[MAX_USER_NAME];
char fromU[MAX_USER_NAME];
char at[15];
int count = 0, flag = 0, count1 = 0;
FILE *file = fopen(MESSAGE_FILENAME, "rt"); //open the messages file
FILE *temp;
clearScreen(); //system("CLS")
if (file == NULL) //if the file didn't exict open one
{
printf("No messages\n");
flag = 1;
_flushall();
file = fopen(MESSAGE_FILENAME, "wt");
_flushall();
}
while (!feof(file) && flag == 0) //if the file did exict
{
if (count1 == 0)
{
temp = file;
}
_flushall();
fscanf(file, "[At]%s [From]%s [To]%s [Message]%s\n", at, fromU, toU, msg); //scan one line at a time
_flushall();
if (strcmp(userName, toU) == 0) //if the userNames match than its a message for the current user
{
count++;
}
count1++;
}
fclose(file);
if (count > 0 && flag == 0) //if there are messages to user
{
printf("You have %d new Messages\n", count);
_flushall();
while (!feof(temp))
{
_flushall();
fscanf(temp, "[At]%s [From]%s [To]%s [Message]%s\n", at, fromU, toU, msg); //scan one line at a time to print it for the user
_flushall();
if (strcmp(userName, toU) == 0)
{
printf("New message at %s from: %s\nStart of message: %s\n-----------------------------------------\n", at, fromU, msg);
}
}
fclose(temp);
}
else if (count == 0 && flag == 0)
{
printf("You have no Messages\n");
}
if (!file)
{
remove(MESSAGE_FILENAME);
}
PAUSE; // system("PAUSE")
}

现在,当我尝试使用此函数阅读时,它仅显示该消息是第一行消息部分中的第一个单词...例如,对于“[At]25/08/2013 [发件人]user1 [收件人]user2 [消息]你好,怎么了?”消息将是“你好”它会被打印两次..我不知道该怎么办,出于某种原因,当我打开文件并执行 fscanf 一次时,它还显示指针文件开始“向上?[At]...(出现在第二行)”

如果您了解我做错了什么,请帮助我(我知道很多)提前致谢

最佳答案

fscanf 的这一部分:

 "..etc.  [Message]%s\n"

只会读取“Hello What's up”中的一个单词,因为 %s 会解析连续字符。

nr_fields = fscanf(file, "[At]%s [From]%s [To]%s  [Message]%80c\n"

最多可以读取 80 个字符,无论短信中是否有空格等。另外,%80c 的目的地必须是 80 个字符或更多!

此外,始终测试 fscanf 找到的字段数量。

最后,fscanf 在按照指示使用时可以工作,但它确实有一些微妙的方面。

关于c - 使用 fscanf 在 c 中读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18476164/

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