Arduino Chaîne De Problème De Mise En Forme
Je suis en train de faire un Arduino alimenté à l'horloge, et dans le processus, je suis en train de format des nombres entiers à deux chiffres formaté cordes pour le temps de lire (par exemple: 1 "01").
La suite me donne "erreur: primary-expression before '{' token":
char * formatTimeDigits (int num) {
char strOut[3] = "00";
if (num < 10) {
strOut = {'0', char(num)};
}
else {
strOut = char(num);
}
return strOut;
}
Je suis en train de l'utiliser comme suit:
void serialOutput12() {
printWeekday(weekday); //picks the right word to print for the weekday
Serial.print(", "); //a comma after the weekday
Serial.print(hour12, DEC); //the hour, sent to the screen in decimal format
Serial.print(":"); //a colon between the hour and the minute
Serial.print(formatTimeDigits(minute)); //the minute
Serial.print(":"); //a colon between the minute and the second
Serial.print(formatTimeDigits(second)); //the second
}
Aucune idée de ce que je suis en manque ici?
OriginalL'auteur amb9800 | 2009-11-24
Vous devez vous connecter pour publier un commentaire.
Le frisé corset syntaxe est valide pour la déclaration initiale d'une variable, mais pas pour l'affectation après le fait.
Aussi, vous êtes de retour d'un pointeur vers une variable automatique, qui n'est plus valablement alloué une fois de retour (et sera brisé par l'appel suivant, comme à
print
). Vous avez besoin de faire quelque chose comme ceci:(Votre orignal exemple) t renvoyer une référence, mais à un objet cesse d'exister après la fonction sort (de sorte qu'il devient un bancales de référence). C n'a pas intégré de comptage de références / garbage collection.
OriginalL'auteur Jeffrey Hantin
En C, vous ne pouvez pas définir directement un contenu du tableau avec la
=
opérateur d'affectation (vous pouvez initialiser un tableau, mais c'est une autre chose, même si elle ressemble).En outre:
char(value)
fonction/opérateur fait ce que vous voulez; etstrOut
tableau, vous aurez à rendre statique de la durée de stockage.La manière la plus simple de faire ce que vous voulez, c'est
sprintf
:sprintf
fait partie de la bibliothèque Arduino -- libs sont brutalement incorporée dans un jeu partiel pour s'intégrer dans une 14kb de texte maximum de la taille de segment.Jeffrey Hantin: j'ai vu quelques exemples qui impliquent qu'il est, mais qui n'ont pas de virgule flottante de soutien lié par défaut.
OriginalL'auteur caf
Un couple de choses:
strOut = {'0', (char)num};
Pour le premier problème, d'attribuer à des éléments d'un tableau:
Pour le 2ème problème, la solution est un peu plus compliqué. Le mieux serait de passer une chaîne de destination à l'
FormatTimeDigits()
fonction et l'appelant de s'en soucier.Encore un autre point sur le 1er élément: vous avez peut-être vu quelque chose de semblable dans un initialisation. Différent de celui de l'assignation, et il permet à un semblable à la recherche de construire que de l'attribution.
Il n'existe aucun moyen pour attribuer plusieurs éléments d'un tableau dans une "simple" déclaration. Mais, comme vous le faites affaire avec des chaînes, vous pouvez utiliser les fonctions de chaîne, comme dans
strcpy(strOut, "00");
oustrcat(strOut, "00");
ousprintf
...OriginalL'auteur pmg