在第一部分我正在阅读文件,然后我试图将数据写入另一个txt文件但无法运行下面的文件...输出错误如下...请让我知道......非常感谢....
Error output:
1>------ Build started: Project: DataValidation, Configuration: Debug Win32 ------
1> Validate.cpp
1>d:\dropbox\validate.cpp(56): error C2059: syntax error : 'if'
1>d:\dropbox\validate.cpp(56): error C2143: syntax error : missing ';' before '{'
1>d:\dropbox\validate.cpp(58): error C2181: illegal else without matching if
1>d:\dropbox\validate.cpp(67): error C2059: syntax error : 'while'
1>d:\dropbox\validate.cpp(71): error C2065: 'inFile' : undeclared identifier
1>d:\dropbox\validate.cpp(71): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\dropbox\validate.cpp(71): error C2365: 'fclose' : redefinition; previous definition was 'function'
1> c:\program files (x86)\microsoft visual studio 12.0\vc\include\stdio.h(184) : see declaration of 'fclose'
1>d:\dropbox\validate.cpp(73): error C2059: syntax error : 'return'
1>d:\dropbox\validate.cpp(74): error C2059: syntax error : '}'
1>d:\dropbox\validate.cpp(74): error C2143: syntax error : missing ';' before '}'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h> //for exit (1)
int main(){
FILE* inFile; //file handle or pointer
FILE* outFile;
char there_was_error = 0;
char opened_in_read = 1;
char filename[100];
char line[100]; //buffer
char test;
int src, dest, type, port;
char data[100];
printf("Enter filename: ");
scanf("%s", filename);
printf("Processing filename %s ...\n", filename);
inFile = fopen(filename, "r");
if (inFile == NULL) { //check if file handler is invalid
printf("Could not open file %s\n", filename);
exit(1); //error status code
}
//test = fscanf(inFile, "%d:%d:%d:%d:", &src, &dest, &type, &port); //read line from file
//fgets(data, 100, inFile);
do {
test = fscanf(inFile, "%d:%d:%d:%d:", &src, &dest, &type, &port);//read line from file
fgets(data, 100, inFile);
//printf("%d %d %d %d %s", src, dest, type, port, data);
outFile = fopen("data_1.txt", "rb+");
if (outFile == NULL)
{
opened_in_read = 0;
outFile = fopen("data_1.txt", "wb");
if (outFile == NULL)
there_was_error = 1;
}
if (there_was_error)
{
printf("Disc full or no permission\n");
return EXIT_FAILURE;
}
if (opened_in_read)
printf("The file is opened in read mode."
" Let's read some cached data\n");
else
printf("%d %d %d %d %s", src, dest, type, port, data);
return EXIT_SUCCESS;
}
if (src >= 1 && src <= 1024){
}
else {
}
if (dest >= 1 && dest <= 1024){
}
else {
}
} while (test != EOF);
fclose(inFile); //must always close file once done
return 0;
}
答案 0 :(得分:1)
我用gcc编译代码。有一个错误..请检查你的do..while循环....以下代码编译正确。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h> //for exit (1)
int main(){
FILE* inFile; //file handle or pointer
FILE* outFile;
char there_was_error = 0;
char opened_in_read = 1;
char filename[100];
char line[100]; //buffer
char test;
int src, dest, type, port;
char data[100];
printf("Enter filename: ");
scanf("%s", filename);
printf("Processing filename %s ...\n", filename);
inFile = fopen(filename, "r");
if (inFile == NULL) { //check if file handler is invalid
printf("Could not open file %s\n", filename);
exit(1); //error status code
}
//test = fscanf(inFile, "%d:%d:%d:%d:", &src, &dest, &type, &port); //read line from file
//fgets(data, 100, inFile);
do {
test = fscanf(inFile, "%d:%d:%d:%d:", &src, &dest, &type, &port);//read line from file
fgets(data, 100, inFile);
//printf("%d %d %d %d %s", src, dest, type, port, data);
outFile = fopen("data_1.txt", "rb+");
if (outFile == NULL)
{
opened_in_read = 0;
outFile = fopen("data_1.txt", "wb");
if (outFile == NULL)
there_was_error = 1;
}
if (there_was_error)
{
printf("Disc full or no permission\n");
return EXIT_FAILURE;
}
if (opened_in_read)
printf("The file is opened in read mode."
" Let's read some cached data\n");
else
printf("%d %d %d %d %s", src, dest, type, port, data);
return EXIT_SUCCESS;
if (src >= 1 && src <= 1024){
}
else {
}
if (dest >= 1 && dest <= 1024){
}
else {
}
} while (test != EOF);
fclose(inFile); //must always close file once done
return 0;
}
请编译一次,让我知道错误。(如果有的话)
答案 1 :(得分:0)
编译器警告您不要使用scanf("%s")
,因为它有serious security problems。它还警告您不要使用fopen
,但只要您检查fopen
,errno
就完全安全了。他们建议您使用fopen_s
代替,仅在C11中提供。似乎主要区别在于fopen_s
返回错误代码而不是设置errno
。这并不是使用它的一个令人信服的理由。