下列程序将数字字符串写入文件”data.txt“ #include<stdio.h> #include<string.h> int main(void){ FILE *fp; char buf[11] = "0123456789"; fp = 4 分 ; if( 2 分 ) { 4 分 ; fclose(fp); } else{ printf("unable to open the file !\n"); } return 0; }
时间: 2023-12-31 18:04:15 浏览: 288
下面是修改过的程序:
```
#include <stdio.h>
#include <string.h>
int main(void) {
FILE *fp;
char buf[11] = "0123456789";
fp = fopen("data.txt", "w");
if (fp != NULL) {
fwrite(buf, sizeof(char), strlen(buf), fp);
fclose(fp);
} else {
printf("unable to open the file !\n");
}
return 0;
}
```
主要修改如下:
1. 打开文件的方式应该是写入("w"),而不是 4 分。
2. 在成功打开文件后,使用 fwrite 函数将数字字符串写入文件。
3. 在完成文件操作后,需要关闭文件。
相关问题
2.从键盘输入姓名,存入文件data.txt中。如果文件中该姓名已存在,则显示文件已存在的相应信息;再次输入其他姓名,若文件中没有该姓名,则将其存入文件中,请填空。 #include<stdio.h> #include<stdlib.h> #include<string.h> int main(void) { FILE *fp; int flag=0; char name[20],data[20]; if((fp=fopen("data.txt", ① ))==NULL) { printf("Cannot open file.\n"); exit(1); } do { printf("Please input name:"); ② ; if(strlen(name)==0) break; else strcat(name,"\n"); rewind(fp); flag=1; while(flag&&((fgets(data,20,fp)!=NULL))) if(strcmp(data,name)==0) flag=0; if(flag) ③ ; else printf("\tThis name existed!\n"); }while(ferror(fp)==0); fclose(fp); return 0; }
以下是代码中缺失的部分:
① 应填写 "a+",即以追加方式打开文件,如果文件不存在则创建。
② 应填写 `fgets(name, 20, stdin)`,即从标准输入(键盘)读入字符串,存储到 `name` 数组中,最多读取 19 个字符。
③ 应填写 `fputs(name, fp)`,即将 `name` 字符串写入到文件中。
修改后的程序如下:
```C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
FILE *fp;
int flag = 0;
char name[20], data[20];
if ((fp = fopen("data.txt", "a+")) == NULL) {
printf("Cannot open file.\n");
exit(1);
}
do {
printf("Please input name:");
fgets(name, 20, stdin);
if (strlen(name) == 0) {
break;
} else {
strcat(name, "\n");
}
rewind(fp);
flag = 1;
while (flag && ((fgets(data, 20, fp) != NULL))) {
if (strcmp(data, name) == 0) {
flag = 0;
}
}
if (flag) {
fputs(name, fp);
} else {
printf("\tThis name existed!\n");
}
} while (ferror(fp) == 0);
fclose(fp);
return 0;
}
```
建议:在文件操作中,要注意文件打开模式,如果是写入模式,会覆盖原有的文件内容,如果是追加模式,则会在原有文件内容的基础上添加新的内容。在读取文件内容时,要注意使用 `rewind` 函数将文件指针移动到文件开头位置,否则会出现读取错误的情况。
#include <stdio.h>#include <stdlib.h>#include <string.h>unsigned int ReadTemperature(); // 假设有一个函数可以读取温度值int main() { unsigned int temp = 0; unsigned char tempt[15] = ""; // 定义一个足够大的数组来存储转换后的温度值 unsigned char i, j; while (1) { temp = ReadTemperature(); sprintf((char *)tempt, "%.1f", temp); // 将温度值转换成字符类型,并存储到tempt数组中 init_lcd(); write_cmd(0x80); // 设置光标位置为第一行第一列 for (i = 0; i < strlen((char *)tempt); i++) { write_data(tempt[i]); // 逐个将tempt数组中的字符写入lcd屏幕中 } } return 0;}为什么我的值一直是0.0,请帮我修改
根据你提供的代码,我们可以初步判断问题可能出在ReadTemperature()函数上。你需要检查该函数的实现,确保其能够正确地读取温度值。同时,你也可以尝试在主函数中手动赋值给temp变量,查看是否能够正确地将其转换成字符类型并显示在LCD屏幕上。以下是一份示例代码,供你参考:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned int ReadTemperature() {
return 235; // 假设温度值为235
}
int main() {
unsigned int temp = 0;
unsigned char tempt[15] = ""; // 定义一个足够大的数组来存储转换后的温度值
unsigned char i, j;
while (1) {
// temp = ReadTemperature();
temp = 235; // 手动赋值
sprintf((char *)tempt, "%.1f", (float)temp / 10); // 将温度值转换成字符类型,并存储到tempt数组中
init_lcd();
write_cmd(0x80); // 设置光标位置为第一行第一列
for (i = 0; i < strlen((char *)tempt); i++) {
write_data(tempt[i]); // 逐个将tempt数组中的字符写入lcd屏幕中
}
}
return 0;
}
```
在这份示例代码中,我们手动将temp变量赋值为235,然后将其转换成字符类型并存储到tempt数组中。需要注意的是,我们将temp除以10再转换成字符类型,这是因为你在sprintf()函数中使用了"%.1f"格式化字符串,表示保留1位小数。如果你的温度值是整型,你需要将其除以10,以保证显示的温度值正确。
如果你的程序能够正常运行并显示温度值,那么问题就很可能出在ReadTemperature()函数上,你需要检查其实现。如果还有问题,可以继续提供更多信息,我们一起来排查。
阅读全文