J'essaie de trouver la fréquence de chiffre dans la chaîne donnée, qui contiennent du chiffre et des lettres. Lorsque j'exécute le même programme, je reçois un résultat différent, ressemblez à une sortie aléatoire. Où est le problème?
int main() {
char num[1001];
int digit[10];
int j,i;
int count;
scanf("%s",num);
for(i=48;i<=57;i++)
{
count = 0;
for(j=0; num[j] != EOF;j++)
{
if(num[j] == i)
{
count++;
}
}
printf("%d ",count);
}
return 0;
}
3 Réponses :
Lorsque vous numérisez la valeur, vous devez fournir l'adresse à la fin de la chaîne, ordinateur met un caractère null Vous avez manqué un & code> dans la ligne avec scanf code> avant num code>. Le code correct doit être: s> & num code> strong> pointe vers l'adresse de la variable num code>. Mais si vous écrivez simplement scanf ("% s", num) code> Vous fournissez une valeur de la variable num code>, que vous ne vous souciez pas du tout. Vous écraserez cette valeur de toute façon. P>
\ 0 code> dont la valeur ASCII est 0, pour noter que cela est la fin de la chaîne. Genre de comme un '.' mais pour un ordinateur. Donc, vous vérifiez que vous trouviez le caractère nulle dans la boucle pour la boucle pour: num [j]! = '\ 0' code> [non EOF] p> p> p> p> P> P> P> P>
Non ce n'est pas vrai. Le format % s code> dans scanf code> est le format unique qui ne veut pas que le & code>: vous passez dans la matrice et scanaf < / code> le remplit. Notez que num code> se désintègre dans un pointeur sur son premier élément lorsque vous le transmettez à une fonction.
Oh bien! Ma faute!! Je me souviens d'avoir oublié & code> dans mes codes et de recevoir des sorties gibberish. Je pensais que OP avait des problèmes similaires. Et j'ai sauté mon arme là-bas ... Merci d'avoir souligné. La fixant maintenant.
On dirait que vous essayez de comparer un élément de char avec un type d'entier.
Par exemple: J'ai couru votre code, et il semble que la sortie est la même donnée compte de la même entrée. P> EDIT: P> Nous voulions comparer un numéro à deux chiffres à un type de données de charme - qui est essentiellement un caractère - un numéro de chiffre fort> fort>. P> lorsque nous prenons un numéro pour obtenir le premier chiffre que nous Divisez simplement par 10 et prenez le quotient, exemple: p> avec cette connaissance, nous pouvons comparer Le N code> et modulo par 10, nous obtenons le dernier chiffre, exemple: p> 48% 10 = 8 code> p> 48/10 = 4 (reste 8). code> p> N-TH code> Char avec premier chiffre et le N + 1-TH code> Char avec le dernier (étant donné que nous comparons seulement deux chiffres, nous nous arrêterons à < Code> N + 1-TH code>). P> Char = Char - " / code> p>
Je ne vois aucun problème ici, il semble que la sortie n'est pas lisible correctement alors essayez d'imprimer correctement comme p>
Pour que vous puissiez lire quel nombre combien de fois. Si vous trouvez une fréquence incorrecte,
Publiez l'entrée pour laquelle vous obtenez une sortie erronée. P> printf ("% c =>% d", i, compte); code> p>
Bonjour, Bienvenue à. Pourriez-vous nous fournir un ensemble d'entrées et de sortie?
Essayez d'imprimer la valeur du caractère où vous vous attendez à code> EOF code> et la valeur de
eof code>.Que se passe-t-il si vous changez la condition de boucle en
num [j]! = '\ 0'; code>En outre, envisagez de changer la boucle sur 'pour (char ch =' 0 '; ch <=' 9 '; ch ++)'. Plus facile à lire vs 49. 57 constantes.
Au lieu de revenir et de compter à nouveau, on pourrait utiliser
chiffre [10] code> pour placer le chiffre, ne nécessitant qu'un seul passage.