我正在尝试编写一个读入测试短语的程序,忽略字符,并将数字存储在数组中。这是我的代码:
#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 ();
}
它返回一个甚至不接近数组的值。我做错了什么?
答案 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;
}