gpt4 book ai didi

c - scanf 与类型错误混淆

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:26 25 4
gpt4 key购买 nike

我只是编写了一个程序来猜测数组中的一些随机对,如果猜对了,删除这对。

我遇到了一个问题,我只能输入整数。每次我尝试输入 * 时,程序都会崩溃。我使用如下条件:

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);

最佳答案

您遇到段错误,因为如果您没有输入整数,scanf 将不会返回 1,然后使用 g[i]将调用 undefined behavior .

FWIW,g是一个局部自动数组变量,除非明确初始化,否则将具有不确定的值。尝试读取该值将调用 UB。

解决方法:

  1. 始终初始化局部变量。
  2. 万一scanf()失败,您需要使用类似 while (getchar != '\n'); 的循环吃掉 无效 输入在你继续接受下一个输入之前。

关于c - scanf 与类型错误混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33129496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com