Есть большая вероятность, что вы делаете это со строкой, которую вы получили с помощью fgets
или аналогичной функции ввода. В этом случае вполне может быть еще перевод строки в конце.
Если вы временно измените свой код на:
void xyz (char *number) {
int i = 0, length = strlen (number);
while (i < length)
printf ("Number[%d]: %c (%d)", i, number[i], number[i]);
i++;
}
}
, который также должен показывать числовые коды для всех символов.
Проблема с кодированием чего-то подобного - 2
в вашей функции заключается в том, что она не будет работать с:
xyz ("123");
, так как он остановится рано, выводится только 12
. вызывающий абонент должен вызывать с допустимыми данными, что означает, что он должен изменить значение, чтобы оно было числовой строкой перед вызовом.
Вы можете увидеть это в следующей программе:
#include <stdio.h>
#include <string.h>
void xyz (char *number) {
int i = 0, length = strlen(number) - 2;
while(i <= length)
{
printf("Number[%d]: %c (%d)\n",i, number[i], number[i]);
i++;
}
puts ("===");
}
void xyz2 (char *number) {
int i = 0, length = strlen(number);
while(i < length)
{
printf("Number[%d]: %c (%d)\n",i, number[i], number[i]);
i++;
}
puts ("===");
}
int main (void) {
char buff[100];
printf ("Enter number: ");
fgets (buff, sizeof (buff), stdin);
xyz (buff);
xyz ("12345");
xyz2 (buff);
xyz2 ("12345");
return 0;
}
(аннотированный) результат этого, если вы введете 98765
, будет:
Enter number: 98765
Number[0]: 9 (57)
Number[1]: 8 (56)
Number[2]: 7 (55) # Your adjustment works here because of the newline.
Number[3]: 6 (54)
Number[4]: 5 (53)
===
Number[0]: 1 (49)
Number[1]: 2 (50)
Number[2]: 3 (51) # But not here, since it skips last character.
Number[3]: 4 (52)
===
Number[0]: 9 (57)
Number[1]: 8 (56)
Number[2]: 7 (55) # Here you can see the newline (code 10).
Number[3]: 6 (54)
Number[4]: 5 (53)
Number[5]:
(10)
===
Number[0]: 1 (49)
Number[1]: 2 (50)
Number[2]: 3 (51) # And proper numeric strings work okay.
Number[3]: 4 (52)
Number[4]: 5 (53)
===
Если вы ищете надежную функцию пользовательского ввода, которая решает эту проблему (и позволяет избежать опасных вещей, таких как неограниченные scanf("%s")
и gets
), у меня есть еще одна в SO (справа ЗДЕСЬ ) на самом деле) взят из моего арсенала.