我正在尝试读取一个整数字符串并将它们转换为来自ascii表示的代码中的数字0-9,因此稍后添加第二个数字将更容易。 我的问题在于,我的程序并不只是将我键入的字符(数字)转换为控制台,而且还是我尝试通过convert_ascii_to_decimal函数中的条件排除的行尾字符。 我的结果给了我正确的小数,但另外100个我不明白。这总是导致功能的条件变为"确保"为假。 我有什么想法可以摆脱它?谢谢! (我的教授也希望" int size"成为convert_ascii_to_decimal函数的一个参数,我不明白为什么。)
#include <stdio.h>
#include <stdlib.h>
#define MAX 5
int read_array(char* number, int size);
int convert_ascii_to_decimal(char* number, int size);
void ensure(int condition, char* message);
int main(void){
char number1[MAX + 1];
int i, r, size1;
r = read_array(number1, MAX);
ensure(r == 0, "Ur number is too long");
size1 = convert_ascii_to_decimal(number1, MAX);
//ensure(size1 != 0, "The number contains something other than digits.\n");
for(i = 0; i <= strlen(number1); i++)
printf("%d", number1[i]);
return 0;
}
int read_array(char* number, int size) {
printf("\nEnter an integer number at a maximum of 5 digits please.\n");
int result = 0;
int count = 0;
char* i = number;
do {
scanf("%c", i);
count++;
} while (*i++ != '\n');
*i = '\0';
if (count > size + 1)
result = 1;
return result;
}
void ensure(int condition, char* message) {
if (!condition) {
printf(message);
exit(EXIT_FAILURE);
}
}
int convert_ascii_to_decimal(char* number, int size) {
int count = 0;
char* i = number;
while(*i != '\0'){
if (*i >= 48 && *i <= 57){
*i -= '0';
count++;
i++;
}
else{
return 0;
break;
}
}
return count;
}
答案 0 :(得分:0)
这是因为你在循环标题中后加i
,然后将 '\n'
之后的字符设置为零。您的do
/ while
循环
do {
...
} while (*i++ != '\n');
当\n
存储在*i
时,结束。之后,i
会递增,因此它指向一个超过行尾字符的字符。
要解决此问题,请更改此行
*i = '\0';
到此:
*(i-1) = '\0';