通过将char转换为小数来获取行尾char

时间:2013-11-17 23:57:42

标签: c

我正在尝试读取一个整数字符串并将它们转换为来自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;
}

1 个答案:

答案 0 :(得分:0)

这是因为你在循环标题中后加i,然后将 '\n'之后的字符设置为零。您的do / while循环

do {
    ...
} while (*i++ != '\n');
\n存储在*i时,

结束。之后,i会递增,因此它指向一个超过行尾字符的字符。

要解决此问题,请更改此行

*i = '\0';

到此:

*(i-1) = '\0';