我遇到了scanf()函數取0作爲輸入的問題,而不是通過鍵盤的實際輸入。 手頭的任務非常簡單。我需要使用upis函數將元素添加到鏈接列表中,然後打印所有元素並清除列表。但是,我一直打印出0。Scanf()取代0而不是Float鍵盤輸入
起初,我以爲有一些問題,我UPIS功能或用代碼,我打印並清除列表塊,但經過一些修修補補,加入的printf(「BROJJJJJJJJJJJ:」 broj);(打印剛剛輸入的數字),我意識到我一直在那裏得到0,所以在上面的行中必須有scanf()發生。我試圖在f之前添加空格,但根本沒有幫助(scanf(「%f」,& broj);)。
由於部分代碼是不是英語,這裏只是一個快速參考指南:
CVOR =節點
諾維=新
glava =根
sljed =下一個
rep = end
broj = num BER
#include <stdio.h>
#include <malloc.h>
typedef struct cvor {
float element;
struct cvor *sljed;
} cvor;
int upis(cvor **glava, cvor **rep, float *broj) {
cvor *novi;
novi=(cvor*)malloc(sizeof(cvor));
if (novi == NULL) return 0;
novi->element = *broj;
novi->sljed = NULL;
if (*glava == NULL) {
*glava = novi;
*rep = novi;
}
else {
(*rep)->sljed = novi;
*rep = novi;
}
printf("%d ", (*glava)->element);
return 1;
}
int main(void) {
cvor *glava=NULL, *rep=NULL, *p=NULL;
float broj;
int n,i;
do {
printf("Unesite n<=10\n");
scanf("%d", &n);
} while (n<=0 || n>10);
/* upisivanje */
for (i=0; i<n; i++) {
printf("Unesite %d. clan liste\n", i+1);
**scanf("%f", &broj);**
**printf("BROJJJJJJJJJJJ:",broj);**
if (!(upis(&glava, &rep, &broj))) printf ("\nUpis neuspjesan\n");
else printf ("\nUpis uspjesan\n");
}
/*ispisivanje i brisanje (od pocetka)*/
for (;glava;) {
printf("%d ", glava->element);
p = glava;
glava = glava->sljed;
free(p);
}
return 0;
}
感謝您的幫助,我搞砸了版畫。我用的是GCC(C:\ ASP>的gcc -ansi -pedantic -Wall,錯誤-o zad1.exe zad1.c),但它未返回任何警告。一切都很乾淨 – scriptybusiness
我只用'-Wall'標誌@scriptybusiness,你可以在我的答案見。你很近,很好! =) – gsamaras