Question

while(((long)(1000*ratio*((long)clock()-(long)t0))%100)/1000)<Data_Read_Rate);

La ligne ci-dessus génère l'erreur suivante: "Erreur de syntaxe avant

Pourquoi cette erreur à venir?

J'utilise MingW32 pour le développement (compilateur GCC).

Merci ...

Était-ce utile?

La solution

Un paren manque à gauche. Cela va analyser:

while ((((long)(1000*ratio*((long)clock()-(long)t0))%100)/1000)<Data_Read_Rate);

En dehors de la question de l'analyse syntaxique:

  • Utilisez un éditeur qui met en valeur entre parenthèses correspondant:)
  • Pourquoi ne pas calculer le temps restant jusqu'à ce que les données taux de lecture a suffisamment baissé, et appeler le sommeil ()? C'est plus agréable sur le processeur.

En outre, compte tenu de votre utilisation de l'opérateur%, vous pouvez avoir les paren supplémentaires placés comme si (je suppose rapport est pas un entier), parce que l'opérateur% nécessite des opérandes entiers :

while (((long)(1000*ratio*(((long)clock()-(long)t0))%100)/1000)<Data_Read_Rate);

(Mais est-il un sens à un niveau sémantique? Hacher it up!)

Autres conseils

Vous avez trop de parenthèse fermante.

De plus, votre logique est si longue et profonde que je ne tiens pas à essayer de comprendre ce que le code devrait être. Juste que vim met en évidence la dernière ) en rouge, ce qui signifie qu'il est mal apparié. Je vous suggère envisager d'utiliser quelques variables intermédiaires et de simplifier la logique de cette déclaration en l'étalant en quelques lignes au lieu d'un.

Parce que le compilateur obtient aussi confus au sujet de votre code que le lecteur humain? [Frisson]

Les espaces et les sauts de ligne sont gratuites et ajouter bien à la lisibilité.

    while ( ( (long)( 1000 * ratio * ( (long)clock() - (long)t0 ) ) % 100 ) / 1000 ) < Data_Read_Rate );

Vous pouvez supprimer le (long) jette de l'horloge () et t0 aussi (en supposant qu'ils sont tous les deux int). les casting avant soustractions ne changera pas le résultat. Pour tout le calcul en temps, ce serait suffisant pour faire un des arguments longs - et le plus court chemin à faire est coulée le littéral 1000:

while ( ( ( 1000l * ratio * ( clock() - t0 ) ) % 100 ) / 1000 ) < Data_Read_Rate );

Hmmm ... attendre. Vous prenez quelque chose, modulo 100 (ce qui donne un nombre compris entre 0 et 99), puis diviser par 1000? Votre résultat est toujours 0 ...

Oh, et vous avez oublié de correspondre à votre parenthèse. ; -)

Comme mentionné précédemment vos parenthèses sont mal appareillés.

Avec des expressions comme celle-ci est-il presque toujours préférable de travailler avec des variables intermédiaires pour simplifier la déclaration. Toutefois, les conseils suivants peuvent vous aider.

  1. Compter les parenthèses en ajoutant 1 pour chaque « ( » et soustraction de 1 pour chaque « ) » vous devriez toujours arriver à une réponse de 0. Une réponse positive signifie que vous avez une somme supplémentaire « ( » une réponse négative que vous avez un supplément ")".
  2. reformater l'expression pour le rendre plus facile à lire, peut-être briser ce sur plusieurs lignes, chaque instruction logique sur une ligne.
  3. Utilisez une coloration syntaxique de code éditeur. Cela devrait montrer la désadaptation pour vous

Il vous manque un entre parenthèses sur le côté gauche.

Vous avez trop de parenthèses d'ouverture et de fermeture. Si vous utilisez Visual Studio, il vous aidera à faire correspondre la parenthèse / accolade d'ouverture et de fermeture avec Ctrl + « [ » et Ctrl + « ] » touches

Une autre suggestion est un groupe et de le diviser en plusieurs lignes en maintenant la lisibilité des expressions. Essayez également de donner de l'espace entre parenthèses après par logiquement regrouper les expressions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top