【发布时间】:2018-10-30 17:58:16
【问题描述】:
我的任务:
编写一个程序,询问用户是读取还是写入文件。如果写入文件,它会要求输入一行文本,并将其写入文件。如果读取,它会读取文件并将其输出到屏幕。文本以非二进制模式写出 - 这与项目 #2 的文件读写不同。记住我们如何使用
fgets()输入字符串。还有一个fputs()。
我正在尝试编写写入部分的代码,但我无法弄清楚我的错误是什么。另外我真的不知道如何创建阅读部分。那我只需要打开文件吗?
我的代码是:
#include <stdio.h>
#define HOLD_SCREEN while(getchar()!='q')
int write() {
int num;
FILE*fptr;
fptr = fopen_s;
if (fptr == NULL) {
printf("ERROR");
exit(1);
}
printf("Enter num: ");
scanf_s("%d", &num);
fprintf(fptr, "%d", num);
fclose(fptr);
return(0);
}
int main(void) {
while (1) {
printf("\n\tEnter an option: (R)ead or (W)rite a file or enter a q if you want to quit: ");
char buf[50];
buf[0] = '\0';
scanf_s("%s", buf, 50);
switch (toupper(buf[0])) {
case 'W':
write();
break;
case 'R':
printInventory();
break;
case 'Q':
return(0);
}
}
HOLD_SCREEN;
return(0);
}
非常感谢您的帮助。
【问题讨论】:
-
fptr = fopen_s;??文件名和其他安全检查在哪里? -
当您尝试编译代码时,您的编译器会给出哪些错误和警告?
-
试试
fptr = fopen("myfile.txt","w"); -
不要使用
scanf_s()。它并不比普通的scanf()更安全,而且它不便携。指出任何推动 C 的附件 K 元素(例如scanf_s())的人:Field Experience With Annex K — Bounds Checking Interfaces:“由于与规范存在大量偏差,因此不能认为 Microsoft 实现符合或可移植。” -
在开始阅读 R/W/q 选项时,我建议您使用
getchar而不是scanf_s。