Ich bin nicht so sicher, wenn die Funktion printf in C eine negative Zahl zurückgeben wird. Ich weiß, dass printf eine negative Zahl, am wahrscheinlichsten -1, zurückgibt, wenn es eine Zeichenfolge nicht drucken konnte. Aber ich möchte wissen, warum und wann es eine Zeichenfolge nicht drucken wird. Zum Beispiel meines Code hier:Wann gibt printf eine negative Zahl zurück?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma pack(1)
typedef struct{
char name[14];
int age;
int yearofbirth;
}person;
int print(person var)
{
if(printf("%s\n", var.name)<0)
{
if(printf("%d\n", var.age)<0)
{
if(printf("%d\n\n", var.yearofbirth)<0)
{
return 1;
}
}
}
return 0;
}
int main(void)
{
int i=0;
person thing;
FILE* file=fopen("Data.txt", "r");
if(file)
{
long amountofstruct = 0;
char* z=(char*)malloc(sizeof(char)*200);
while(fgets(z,100,file)!=NULL)
{
amountofstruct++;
}
fseek(file,0,SEEK_END);
free(z);
int k=0;
/* while(k<amountofstruct)
{
fseek(file,sizeof(person)*k,SEEK_SET);
fread(&function[k], sizeof(person),1,file);
k++;
}
int szt;
printf("%p",function);
for(szt=0;szt<amountofstruct;szt++)
{
printf("Person %d:\tName:%s\t Age:%i\t Year Of Birth:%i\n",szt+1,function[szt].name,function[szt].age,function[szt].yearofbirth);
}*/
printf("thesizeofstruct:%ld\n",sizeof(person));
printf("%ld",amountofstruct);
//thing.name = {' ',' ',' ',' ',' ',' ',' ',' ',' ','\0'};
char *l = (char*)malloc(11);
while(k<amountofstruct)
{
fseek(file,sizeof(person)*k,SEEK_SET);
if(fread(&thing, sizeof(thing), 1, file)!=0)
{
thing.name[13]='\0';
// printf("sizeof(thing string)%lu\n sizeof(thing)%lu\n", sizeof(thing.name),strlen(thing.name));
if(print(thing)==0)
{
printf("\nThe thing failed, sorry");
return 0;
}
//char *p = strchr(thing.name, ' ');
// *p='\0';
// strcpy(l,thing.name);
//printf("Person %d: \t Name: %s\t Age: %d\t Year Of Birth: %d\n", k+1, l, thing.age, thing.yearofbirth);
// thing.name[0]='\0';
// thing.age=0;
// thing.yearofbirth=0;
k++;
}
}
free(l);
}
else
{
perror("The file could not be opened");
}
getchar();
return 0;
}
die printf Druck der ganzen Zahlen var.age und var.yearofbirth in Funktion Druck gibt immer eine negative Zahl. Die Zeile
printf("%s\n", var.name);
im Funktionsdruck gelingt, aber das ist alles. Aber in meiner Data.txt wird das Alter und das Geburtsjahr jeder Person sehr klar wie folgt angegeben.
Name Age YearofBirth
Warum wird printf eine negative Zahl zurückgeben? Danke,
Mögliches Duplikat von [Rückgabewert der Funktion printf() in C] (http://stackoverflow.com/questions/7055882/return-value-of-printf-function-in-c) – John3136
Ihre zwei nachfolgenden 'printf 's werden nicht einmal ausgeführt, wenn der erste erfolgreich ist und etwas Positives zurückgibt. – tkausl
Die [man-Seite] (https://linux.die.net/man/3/printf) besagt, dass 'wenn ein Ausgabefehler auftritt, ein negativer Wert zurückgegeben wird. '. Wenn das passiert, schauen Sie sich [errno] (https://linux.die.net/man/3/errno) an, um herauszufinden, was falsch gelaufen ist. Und eine sanfte Bitte: das nächste Mal bitte säubern Sie Ihren Code, bevor Sie schreiben, diese auskommentierten Blöcke haben nichts mit dem Problem zu tun, das Sie haben, und es macht es schwer, den Code zu lesen, und sieht unordentlich aus. – fvu