```#include<stdio.h>
#include<string.h>
#include <stdlib.h>
int main()
{
struct MyStruct
{
char name[4] ;
int id;
int strp;
}str[2];
FILE* fp ;
fopen_s(&fp,"C:\\Users\\Administrator\\Desktop\\Autodesk - Maya 2017 Win x64\\op.txt", "wt+") ;
printf("QINGSHRUU\n");
for (int i = 0; i < 2; i++)
{
scanf_s("%s ,%d, %d", str[i].name, &str[i].id, &str[i].strp);
}
for (int i = 0; i < 2; i++)
{
fprintf_s(fp,"%s ,%d, %d", str[i].name, str[i].id, str[i].strp );
}
fclose(fp);
}
为什么编译经常报错使用vs2019
在VS2019中,第9行的fopen_s
函数需要传递三个参数,而第二个参数是文件打开方式。你的代码中第二个参数是文件路径,没有指定文件打开方式,因此编译失败。可以尝试替换成以下代码:
fopen_s(&fp,"C:\\Users\\Administrator\\Desktop\\Autodesk - Maya 2017 Win x64\\op.txt", "w+");
另外,在使用scanf_s
函数时,需要将格式字符串中的占位符与参数用逗号隔开,而你的代码中逗号后应该没有空格。可以尝试替换成以下代码:
scanf_s("%s,%d,%d", str[i].name, 4, &str[i].id, &str[i].strp);
最后,在使用fprintf_s
函数时,可以在字符串末尾加上换行符,便于区分每个元素。可以尝试替换成以下代码:
fprintf_s(fp,"%s,%d,%d\n", str[i].name, str[i].id, str[i].strp);
修改后的代码如下:
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
int main()
{
struct MyStruct
{
char name[4] ;
int id;
int strp;
}str[2];
FILE* fp ;
fopen_s(&fp,"C:\\Users\\Administrator\\Desktop\\Autodesk - Maya 2017 Win x64\\op.txt", "w+");
printf("QINGSHRUU\n");
for (int i = 0; i < 2; i++)
{
scanf_s("%s,%d,%d", str[i].name, 4, &str[i].id, &str[i].strp);
}
for (int i = 0; i < 2; i++)
{
fprintf_s(fp,"%s,%d,%d\n", str[i].name, str[i].id, str[i].strp );
}
fclose(fp);
return 0;
}
如果还有其他错误,可以参考错误提示信息进行调整。
修改如下,改动处见注释,供参考:
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
int main()
{
struct MyStruct
{
char name[4];
int id;
int strp;
}str[2];
FILE* fp;
int err = fopen_s(&fp, "C:\\Users\\Administrator\\Desktop\\Autodesk - Maya 2017 Win x64\\op.txt", "wt+"); //修改
if (err) // 修改
{
perror("C:\\Users\\Administrator\\Desktop\\Autodesk - Maya 2017 Win x64\\op.txt"); // 修改
return 1; // 修改
}
printf("QINGSHRUU\n");
for (int i = 0; i < 2; i++)
{
scanf_s("%s%d%d", str[i].name, 4, &str[i].id, &str[i].strp); // 修改
//scanf_s("%s ,%d, %d", str[i].name, &str[i].id, &str[i].strp); // 修改
}
for (int i = 0; i < 2; i++)
{
fprintf_s(fp, "%s ,%d, %d", str[i].name, str[i].id, str[i].strp);
}
fclose(fp);
return 0;
}