2

我的代码有什么问题?

#include<stdio.h>
#include<string.h>

int main() {
    FILE *file;

    char string[32] = "Teste de solução";

    file = fopen("C:\file.txt", "w");

    printf("Digite um texto para gravar no arquivo: ");
    for(int i = 0; i < 32; i++) {
        putc(string[i], file);
    }

    fclose(file);

    return 0;
}

错误:

c:\users\guilherme\documents\visual studio 2010\projects\helloworld\helloworld\hello.c(13): error C2143: syntax error : missing ';' before 'type'
1>c:\users\guilherme\documents\visual studio 2010\projects\helloworld\helloworld\hello.c(13): error C2143: syntax error : missing ';' before 'type'
1>c:\users\guilherme\documents\visual studio 2010\projects\helloworld\helloworld\hello.c(13): error C2143: syntax error : missing ')' before 'type'
1>c:\users\guilherme\documents\visual studio 2010\projects\helloworld\helloworld\hello.c(13): error C2143: syntax error : missing ';' before 'type'
1>c:\users\guilherme\documents\visual studio 2010\projects\helloworld\helloworld\hello.c(13): error C2065: 'i' : undeclared identifier
1>c:\users\guilherme\documents\visual studio 2010\projects\helloworld\helloworld\hello.c(13): warning C4552: '<' : operator has no effect; expected operator with side-effect
1>c:\users\guilherme\documents\visual studio 2010\projects\helloworld\helloworld\hello.c(13): error C2065: 'i' : undeclared identifier
1>c:\users\guilherme\documents\visual studio 2010\projects\helloworld\helloworld\hello.c(13): error C2059: syntax error : ')'
1>c:\users\guilherme\documents\visual studio 2010\projects\helloworld\helloworld\hello.c(13): error C2143: syntax error : missing ';' before '{'
1>c:\users\guilherme\documents\visual studio 2010\projects\helloworld\helloworld\hello.c(14): error C2065: 'i' : undeclared identifier
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
4

2 回答 2

8

显然,您将其编译为 C,而不是 C++。VS 不支持 C99,在这种情况下你可能不会这样做:

for (int i = 0; i < 32; i++)

你需要这样做:

int i;

...

for(i = 0; i < 32; i++)

的声明i必须在函数中的所有语句之前。

于 2013-03-07T00:29:57.507 回答
2

我认为 Oli Charlesworth 已经为您提供了所需的答案。

这里有一些提示:

  • 如果在字符串中使用反斜杠,则必须放置两个反斜杠。

  • 您应该检查 的结果fopen(),如果是,NULL您应该停止并出现错误。

  • 你不应该为你的字符串指定数组的大小;让编译器计算要分配多少个字符。

  • for循环中,你不应该硬编码字符串的大小;使用sizeof()并让编译器检查长度,否则循环直到看到终止的 nul 字节。我建议后者。

改写版:

#include<stdio.h>
#include<string.h>

int main() {
    FILE *file;
    int i;

    char string[] = "Teste de solução";

    file = fopen("C:\\tmp\\file.txt", "w");
    if (!file) {
        printf("error!\n");
    }

    printf("Digite um texto para gravar no arquivo: ");
    for(i = 0; string[i] != '\0'; i++) {
        putc(string[i], file);
    }

    fclose(file);

    return 0;
}
于 2013-03-07T00:43:35.880 回答