我面临过这样的问题:运行时检查失败#2 -堆在变量' Check‘周围的代码在visual studio 12中被破坏。我也在代码库中尝试过这一点,但也面临着同样的问题。我也在ideone.com中运行我的代码,它显示运行时错误。它适用于Y,但不适用于N
int main() {
int led=0;
int ohm=0;
char check;
int flag=0;
while (led < 1 || led > 3){
printf("Enter the number of switch you want to close: \n\n");
printf(" ******************** Press 1 for switch (LED) 1 ********************\n");
printf(" ******************** Press 2 for switch (LED) 2 ********************\n");
printf(" ******************** Press 3 for switch (LED) 3 ********************\n");
printf("Switch: ");
scanf("%d", &led);
}
printf("\n\n");
while (ohm < 1 || ohm > 3){
printf("Enter the resistance of Rheostat: \n\n");
printf(" ******************** Press 1 for 10 ohm resistance ********************\n");
printf(" ******************** Press 2 for 20 ohm resistance ********************\n");
printf(" ******************** Press 3 for 30 ohm resistance ********************\n");
printf("Resistance: ");
scanf("%d", &ohm);
}
while (flag == 0)
{
//LED-1
if(led== 1 && ohm== 1 )
{
printf("LED-1 is blinking 2 times\n");
}
if(led== 1 && ohm== 2)
{
printf("LED-1 is blinking 4 times\n");
}
if(led== 1 && ohm== 3 )
{
printf("LED-1 is blinking 6 times\n");
}
//LED-2
if(led== 2 && ohm== 1 )
{
printf("LED-2 is blinking 2 times\n");
}
if(led== 2 && ohm== 2 )
{
printf("LED-2 is blinking 4 times\n");
}
if(led == 2 && ohm == 3)
{
printf("LED-2 is blinking 6 times\n");
}
//LED-3
if(led == 3 && ohm == 1 )
{
printf("LED-3 is blinking 2 times\n");
}
if(led == 3 && ohm == 2)
{
printf("LED-3 is blinking 4 times\n");
}
if(led == 3 && ohm == 3)
{
printf("LED-3 is blinking 6 times\n");
}
printf("Do you want to continue Yes (Y) or No (N): ");
scanf("%s", &check);
if(check =='Y' || check =='y')
{
led = 0;
ohm = 0;
while (led < 1 || led > 3){
printf("Enter the number of switch you want to close on: ");
scanf("%d", &led);
}
while (ohm < 1 || ohm > 3){
printf("Enter the resistance of Rheostat: ");
scanf("%d", &ohm);
}
}
if(check=='N' || check=='n')
{
printf("Thanks for using the program");
flag = 1;
}
}
return 0;}
发布于 2013-07-29 07:21:52
在语句scanf ("%s", &check);中,您试图扫描一个字符串并将其填充到一个字符中。有几种方法可以解决这个问题:
快速修复:将scanf("%s", &check)替换为scanf (" %c", &check)。注意格式字符串中的空格:" %c",而不仅仅是"%c"。%c格式说明符不会跳过前导空格,因此必须在格式字符串中在%c之前包括空格,以显式地向scanf()发出要跳过前导空格的信号。如果你不这样做,就会发生以下情况:
Enter the resistance of Rheostat:左转到输入流中的回车将作为输入字符。check将被指定为\n。if条件都将失败;check既不是Y也不是y,也不是N或n。while循环的顶部,对于flag,它仍然是零。因此,有关ohm和led的适当值的输出将再次显示,然后将再次显示check提示符。scanf()将再次检查输入流,这一次读取用户输入的实际选择,并执行适当的操作。通过在格式字符串中包含前导空格,可以避免重复输出。
一个更好的修复:在每次调用scanf()之后刷新输入缓冲区。定义宏:
#define FLUSH while (getchar() != '\n')每次调用scanf()之后,输入FLUSH;。安全多了。
发布于 2013-07-29 06:06:44
scanf("%s", &check);应该是scanf("%c", &check);,因为您读取的是char,而不是字符串。
发布于 2013-07-29 06:06:41
问题是你的变量“检查”太小了。
scanf("%1s", check);因为您正在保存一个字符串(终止\0),所以您应该使用一个更大的变量:
char check[2];编辑:但是是的,当输入仅仅是一个字符时,scanf("%c",&check)要好得多。
https://stackoverflow.com/questions/17917029
复制相似问题