我只是制作一个程序来猜测数组中的一些随机对,如果猜对了,删除这对。
我遇到了一个问题,我只能输入整数。每次尝试键入*时,程序都会崩溃。我使用的条件如下:
if (scanf("%d",&temp)==1)
试图解决我的问题,但它确实无法正常工作。
这是我的代码,请给我一些帮助:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int r[4]; //random
int s[8]; //store
char c[8]; //cover
int g[8]; //guess
int i;
int round=0;
int left = 4;
int point = 0;
int clear_index[2];
int temp;
// generate random number
for (i=0;i<4;i++)
{
r[i] = (rand()%10)+1;
s[i] = r[i];
s[i+4] = r[i];
}
// show the default number
printf("[show] ");
for (i=0;i<8;i++)
{
printf("%d ",s[i]);
c[i] = '*';
}
printf("\n");
while(left>0)
{
// print left
printf("[cover] ");
for (i=0;i<8;i++)
printf("%c ",c[i]);
printf("\n");
//guess
printf("[guess] ");
for(i=0;i<8;i++)
{
if (scanf("%d",&temp)==1)
g[i] = temp;
if (g[i] == s[i])
{
printf("v\n");
clear_index[point] = i;
point++;
}
}
if (point == 2)
{
for (i=0;i<2;i++)
c[clear_index[i]]=' ';
left-=1;
point = 0;
}
round+=1;
//left-=1;
}
printf("you won in %d round",round);
}
答案 0 :(得分:1)
您遇到分段错误,因为如果您没有输入整数,则scanf不会返回1,然后使用g[i]
将调用http://www.am22tech.com/load-facebook-like-box-on-scroll-asynchronously/。
FWIW,g
是一个本地自动数组变量,除非明确初始化,否则将具有不确定的值。尝试读取该值将调用UB。
解决方案:
scanf()
失败,您需要使用while (getchar != '\n');
之类的循环吃掉无效的输入,然后再继续下一个输入答案 1 :(得分:0)
您正在阅读一个数字,但用户可以放置一个数字。为防止这种情况,您可以使用库stdlib.h中的函数atoi()。它将字符串转换为整数,如果整数只是数字,它会将其转换为整数。如果它是一个字符,它将返回0.所以你只需要在调用atoi()函数后防止出现0。