Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scanf()接受0而不是浮点键盘输入_C_Io_Linked List_Floating Point_Scanf - Fatal编程技术网

Scanf()接受0而不是浮点键盘输入

Scanf()接受0而不是浮点键盘输入,c,io,linked-list,floating-point,scanf,C,Io,Linked List,Floating Point,Scanf,scanf()函数将0作为输入而不是通过键盘的实际输入时出现问题。 手头的任务相当简单。我需要使用upis函数将元素添加到链接列表中,然后打印所有元素并清除列表。然而,我一直在打印0 起初,我认为我的upis函数或打印并清除列表的代码块有问题,但经过一些修补和添加printf(“brojjj:,broj”)(打印我刚输入的数字),我意识到我一直在那里得到0,所以上面一行中的scanf()肯定有问题 我尝试在f之前添加空格,但这根本没有帮助(scanf(“%f”,&broj);) 由于部分代码不是

scanf()函数将0作为输入而不是通过键盘的实际输入时出现问题。 手头的任务相当简单。我需要使用upis函数将元素添加到链接列表中,然后打印所有元素并清除列表。然而,我一直在打印0

起初,我认为我的upis函数或打印并清除列表的代码块有问题,但经过一些修补和添加printf(“brojjj:,broj”)(打印我刚输入的数字),我意识到我一直在那里得到0,所以上面一行中的scanf()肯定有问题

我尝试在f之前添加空格,但这根本没有帮助(scanf(“%f”,&broj);)

由于部分代码不是英文的,这里只是一个快速参考指南:

cvor=节点

novi=新

格拉瓦=根

sljed=下一个

rep=结束

broj=数字

#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;
}
#包括
#包括
类型定义结构cvor{
浮动元件;
结构cvor*sljed;
}cvor;
int upis(cvor**glava、cvor**rep、float*broj){
cvor*novi;
novi=(cvor*)malloc(sizeof(cvor));
if(novi==NULL)返回0;
novi->element=*broj;
novi->sljed=NULL;
如果(*glava==NULL){
*glava=novi;
*rep=novi;
}
否则{
(*rep)->sljed=novi;
*rep=novi;
}
printf(“%d”,(*glava)->元素);
返回1;
}
内部主(空){
cvor*glava=NULL,*rep=NULL,*p=NULL;
浮子兄弟;
int n,i;
做{

printf(“Unesite n您的列表代码是正确的,您使用
%d
格式打印元素,而它们是浮动的,因此更改此项:

printf("%d  ", (*glava)->element);
为此:

printf("%f  ", (*glava)->element);
并且应该看到正确的结果

./a.out 
Unesite n<=10
4
Unesite 1. clan liste
3.14
3.140000  
Upis uspjesan
Unesite 2. clan liste
2.78
3.140000  
Upis uspjesan
Unesite 3. clan liste
1.11
3.140000  
Upis uspjesan
Unesite 4. clan liste
2.22
3.140000  
Upis uspjesan
3.140000  2.780000  1.110000  2.220000  
请尝试以下操作,而不是调试尝试:

printf("BROJJJJJJJJJJJ: %f\n",broj);
当然,我强烈建议你注意另外两张照片,除非你想要不准确的照片


没有
malloc.h
,要使用malloc(和free),请执行以下操作:

 #include <stdlib.h>
#包括
不是什么导致了你的错误,但不是


我以前试过添加空格

这在处理字符时很有用。我将在中进一步讨论这一点。

三个问题:

  • 不测试scanf的返回值总是一个bug
  • 您不扫描输入中的换行符或空格,因此进一步的scanf调用可能会返回0(您没有测试该值;空格不能是浮点的一部分),并保持关联的参数不变。请使用类似的方法,在浮点之前跳过任意数量的空格字符:

    if(scanf(“%f”,&broj)==1){
    /*有东西吗*/
    }否则{
    /*EOF或错误*/
    }

  • 格式不匹配int与float


  • Upvote建议检查
    scanf()
    的返回值,这有时会导致麻烦。感谢您的回答,但在本例中,我搞错了printf()函数。感谢您的帮助,我搞错了打印。我正在使用GCC(C:\asp>GCC-ansi-Wall-pedantic errors-o zad1.exe zad1.C)但它没有返回任何警告。一切看起来都很干净。我只使用了
    -Wall
    flag@scriptybusiness,正如你在我的回答中所看到的。你很接近,干得好!=)
     #include <stdlib.h>