我真的找不到这个功能的错误,请帮忙!它在scanf
中区分错误。它应该在队列中插入一个实现为循环缓冲区的元素:
#include <stdio.h>
#include <stdlib.h>
int n, front, rear;
int A[100];
#define True 1
#define False 0
#define UNDERFLOW -1589
int insert(void);
int delete(void);
int main(void)
{
int option;
//Unos i error checking
printf("Unesite kapacitet bafera:");
while(True)
{
if (scanf("%d", &n) != 0)
{
if (n > 0 && n < 100)
{
break;
}
else
{
printf("Kapacitet je ceo broj izmedju 0 i 100, pokusajmo ponovo");
continue;
}
}
else
{
printf("Kapacitet je ceo broj izmedju 0 i 100");
return 1;
}
}
front = n;
rear = n;
while(True)
{
printf("\n\n IZABERITE OPCIJU \\n\n");
printf("1 DODAJ ELEMENT\n");
printf("2 UKLONI ELEMENT\n");
printf("3 OCITAJ ELEMENT NA POCETKU REDA\n");
printf("4 PRIKAZI BROJ ZAUZETIH MESTA\n");
printf("5 PRIKAZI MAKSIMALNI KAPACITET REDA\n");
printf("6 IZLAZ\n");
scanf("%d", option);
switch(option)
{
case 1: insert(); break;
case 2: delete(); break;
// case 3: pop(); break;
// case 4: space_left(); break;
// case 5: capacity(); break;
// case 6: return 0; break;
default: printf("Pogresan unos!"); break;
}
}
}
/**
* Ubacivanje u red.
* Vrednosti koje funkcija vraca:
* 0-element je uspesno ubacen
* 1-overflow
* 2-pogresan unos
*/
int insert(void)
{
int h;
printf("Unesite broj koji treba dodati:");
scanf("%d", &h);
// if (scanf("%d", &h) != 0)
// {
// printf("Morate uneti ceo broj!");
// return 2;
// }
rear = rear % n + 1;
if (front == rear)
{
return 1; //overflow
}
else
{
A[rear] = h;
return 0;
}
}
/**
* Brise element iz reda i vraca njegovu vrecdnost.
* Ako vrati UNDERFLOW, znaci da je overflow
*/
int delete(void)
{
int x;
if (front == rear)
{
return UNDERFLOW;
}
else
{
x = A[front];
front = front % n + 1;
return x;
}
}
我收到此消息:
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7a6d0d5 in _IO_vfscanf_internal (s=<optimized out>, format=<optimized out>, argptr=argptr@entry=0x7fffffffdc88, errp=errp@entry=0x0) at vfscanf.c:1826
1826 vfscanf.c: No such file or directory.
答案 0 :(得分:2)
你应该改变:
scanf("%d", option);
至scanf("%d", &option);
你使用了unitialized int
作为指针,它可以指向任何地方,这就是你出现分段错误的原因
答案 1 :(得分:0)
在 第56行 中,您应该更改语句
scanf("%d", option);
来
scanf("%d", &option);
当我运行你的代码时,我收到了以下警告:
stackOv.c: In function ‘main’:
stackOv.c:56:9: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
scanf("%d", option);
我马上去了这条线,我修好了,它开始运行得很完美:)。我希望这能解决问题。