【发布时间】:2014-08-16 13:25:55
【问题描述】:
有谁知道为什么我在运行此代码时会出现段错误? Valgrind 告诉我,我在第 13 行 if( !isdigit(x) ) 上有“大小为 4 的未初始化值”,并且在同一行上有一个无效的读取大小 2——地址没有被堆栈, malloc'd 或 free'd。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>
int main()
{
int x;
printf("Please enter a number: ");
scanf("%d", &x);
if( !isdigit(x) )
{
printf("You entered %d\n", x);
}
else
{
printf("You did not enter a valid number!\n");
}
return 0;
}
【问题讨论】:
-
isdigit用于处理字符值;例如,对于'1'的输入,它将返回 true,对于'a'的输入,它将返回 false。您输入的内容是什么? -
如果您使用
%d,isdigit()不会以您希望的方式工作。例如,如果输入1,x将不包含字符1的ASCII 码,因此isdigit()将返回false。 -
请记得经常检查输入是否成功:
scanf(...) == 1? -
不相关,但如果输入不是数字,scanf 将失败。因此,您可以将其替换为 scanf 的结果,而不是检查“isdigit”。
-
"得到一个段错误" - 这不是一个段错误。