阅读短语&过滤掉字符以查找数字C.

时间:2016-03-11 04:53:24

标签: c arrays printf character

我正在尝试编写一个读入测试短语的程序,忽略字符,并将数字存储在数组中。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define max_length 60
void main ()
{
    int c;
    int input_chars[max_length];
    int length;
    int reverse = 0;
    int temp;
    printf ("Input the test phrase: ");
    length = 0;
    /* limit the length of the phrase to the first 60 chars */
    /* do not store any non-digit input */
    while ((c = getchar ()) != '\n' && length < max_length) {
        if (isdigit (c)) {
            input_chars[length] = c - 48;
            length++;
        }
    }
    for (length = 0; length < 60; length++) {
        printf ("The array is %d", input_chars[length]);
    }
    getch ();
}

它返回一个甚至不接近数组的值。我做错了什么?

1 个答案:

答案 0 :(得分:0)

您使用具有自动存储持续时间的未初始化变量input_chars的值来调用未定义行为,这是不确定的。

您应该只打印您在这种情况下阅读的内容。

其他说明:

  • 您应该使用缩进正确格式化代码。
  • 您应该使用'0'代替幻数48。 (根据N1256 5.2.1字符集)
  • 确定数字的字符代码是连续的
  • 您应该使用标准int main(void)而不是实现定义的void main(),除非您需要使用后者。
  • 出于安全考虑,您应该检查c是否不是EOF

更正后的代码:

#include <stdio.h>
#include <ctype.h>

#define max_length 60
int main (void)
{
    int c;
    int input_chars[max_length];
    int length;
    int reverse=0;
    int temp;
    printf ("Input the test phrase: ");
    length = 0;
    /* limit the length of the phrase to the first 60 chars */
    /* do not store any non-digit input */
    while ((c = getchar()) != '\n' && c != EOF && length < max_length) {
        if (isdigit(c)) 
        {
            input_chars[length] = c - '0'; length++;
        }
    }
    for(temp=0;temp<length;temp++){
        printf("The array is %d", input_chars[temp]);
    }
    return 0;
}