Я делал довольно легкую программу преобразования строки символов (при условии ввода чисел) в Integer.
После того, как я закончил, я заметил некоторые очень странные "ошибки", на которые я не могу ответить, главным образом из-за моего ограниченного знания о том, как работают функции scanf()
, gets()
и fgets()
. (Я прочитал много литературы, хотя.)
Поэтому, не пиши слишком много текста, вот код программы:
#include <stdio.h>
#define MAX 100
int CharToInt(const char *);
int main()
{
char str[MAX];
printf(" Enter some numbers (no spaces): ");
gets(str);
// fgets(str, sizeof(str), stdin);
// scanf("%s", str);
printf(" Entered number is: %d\n", CharToInt(str));
return 0;
}
int CharToInt(const char *s)
{
int i, result, temp;
result = 0;
i = 0;
while(*(s+i) != '\0')
{
temp = *(s+i) & 15;
result = (temp + result) * 10;
i++;
}
return result / 10;
}
Итак, вот проблема, с которой я столкнулся. Во-первых, при использовании функции gets()
программа работает отлично.
Во-вторых, при использовании fgets()
результат немного неправильный, потому что, по-видимому, функция fgets()
считывает символ новой строки (ASCII значение 10), который затягивает результат.
В-третьих, при использовании функции scanf()
результат полностью неверен, потому что первый символ, по-видимому, имеет значение -52 ASCII. Для этого у меня нет объяснений.
Теперь я знаю, что gets()
не рекомендуется использовать, поэтому я хотел бы знать, могу ли я использовать fgets()
здесь, чтобы он не читал (или игнорировал) символ новой строки.
Кроме того, какая сделка с функцией scanf()
в этой программе?