0
void RecvFile() 
{ 
int rval; 
char buf[0x1000]; 
FILE *file = fopen("C:\\pic.bmp", "wb"); 
if (!file)
{
    printf("Can't open file for writing");
    return;
}

do
{
    rval = recv(winsock, buf, sizeof(buf), 0);
    if (rval < 0)
    {
        // if the socket is non-blocking, then check
        // the socket error for WSAEWOULDBLOCK/EAGAIN
        // (depending on platform) and if true then
        // use select() to wait for a small period of
        // time to see if the socket becomes readable
        // again before failing the transfer...

        printf("Can't read from socket");
        fclose(file);
        return;
    }

    if (rval == 0)                 
        break; //line 159

    int off = 0;
    do
    {
        int written = fwrite(&buf[off], 1, rval - off, file);
        if (written < 1)
        {
            printf("Can't write to file");
            fclose(file);
            return;
        }

        off += written;
    }
    while (off < rval)
} //line 175

fclose(file); 
}

175 '}' トークンの前の構文エラー
159 以前のエラーによって混乱し、救済される

どうすればいいのかわからない...助けてくれる?私はまだCプログラミングの初心者です。コードにエラー行を挿入しました。私が理解できないのは、なぜこのエラーが発生するのかということです...理由を説明してもらえますか?

4

4 に答える 4

2

;実際にはwhileループで欠落しています

while (off < rval);   // 174 line
                  ^

2 番目の外側のループには while がありません

do{

}// 175 line
while()  // this is missing ???

私は100%確信していませんが、外側のように無限ループが必要だと思います(以下の大まかなコード) コメントを読んでください:

do{

   // rev = recv(....
   if(rev <){
    // you return from here that is reason i believe you need infinite loop 
    // code
   }
   //code
   do{
       // your code
   }while (off < rval); // at like 174
}while(1); // line 175
于 2013-03-03T14:50:20.197 に答える
0

while175 行目では、最初に対応する do ステートメントがあるため、ステートメントがあるはずです。コード内の別の do-while ステートメントにもセミコロンがありません。

void RecvFile() 
{ 
int rval; 
char buf[0x1000]; 
FILE *file = fopen("C:\\pic.bmp", "wb"); 
if (!file)
{
    printf("Can't open file for writing");
    return;
}

do //******Where is the while for this do statement?*****
{
    rval = recv(winsock, buf, sizeof(buf), 0);
    if (rval < 0)
    {
        // if the socket is non-blocking, then check
        // the socket error for WSAEWOULDBLOCK/EAGAIN
        // (depending on platform) and if true then
        // use select() to wait for a small period of
        // time to see if the socket becomes readable
        // again before failing the transfer...

        printf("Can't read from socket");
        fclose(file);
        return;
    }

    if (rval == 0)                 
        break; //line 159

    int off = 0;
    do
    {
        int written = fwrite(&buf[off], 1, rval - off, file);
        if (written < 1)
        {
            printf("Can't write to file");
            fclose(file);
            return;
        }

        off += written;
    }
    while (off < rval) // *** A semicolon is needed here ***
} //line 175

fclose(file); 
}
于 2013-03-03T14:50:33.413 に答える
0

do...whileブロックの後のセミコロンを忘れた

変化する

while (off < rval)while (off < rval);

于 2013-03-03T14:51:03.907 に答える
0

2箇所間違いがあります。

  1. while (off < rval)に置き換える必要がありますwhile (off < rval);
  2. while最初のステートメントがありませんdo
于 2013-03-03T14:53:08.017 に答える