gpt4 book ai didi

c - 打印出额外的数字? (C)

转载 作者:行者123 更新时间:2023-11-30 21:09:51 25 4
gpt4 key购买 nike

您好,我现在正在编写一个程序,从文件中读取值。

它通过 fgets 将值作为字符串读取然后我想将其中一个字符串更改为整数:

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <stdlib.h>
#define FILSIZE 1024


typedef struct _node
{
unsigned int uid;
char *uname;
struct _node *next;
} *node;



int main(int argc, char* argv[])
{
FILE *pFile; // pointer file
char currentLine[FILSIZE];
bool isListEmpty = true;
node firstNode = NULL;

printf( "\n\nargc: %d\nargv[0]: %s\nargv[1]: %s\n\n", argc, argv[0], argv[1] );


if(argc == 1)
{
pFile = stdin;
}


else if (argc == 2)
{

char buffer [50];
sprintf(buffer, "%s.txt" ,argv[1]);
printf("%s", buffer);
pFile = fopen(buffer, "r");

}

if(pFile == NULL )
{
printf("Not working");


exit(0);
}

int i=1;
int nameCounter = 1;
int colonCounter=0;


while(!feof( pFile ) && fgets(currentLine, sizeof(currentLine), pFile))
{



unsigned int nameLength;
unsigned int tempuid;
unsigned int idstorlek;
node firstNode = malloc(sizeof(struct _node));

char *temporaryString;
temporaryString = strtok(currentLine, ":");
colonCounter=colonCounter+1;

//printf(" fungera pls");
printf(" %d Namnordning %s \n", nameCounter, temporaryString);

nameLength = strlen(temporaryString);
firstNode->uname = malloc((nameLength+1) * sizeof(char));
strcpy(firstNode->uname, temporaryString);




printf("NAMNET: %s \n", temporaryString);


while(temporaryString != NULL)
{
printf(" %s \n", temporaryString);

if(colonCounter == 3)
{

int tempuid=atoi(temporaryString);
// idstorlek = sizeof(tempuid);
// firstNode->uid = malloc(4);
printf(" IDN: %d \n", tempuid);
firstNode->uid = tempuid;
printf("firstNodeid %d", firstNode->uid);
}

temporaryString = strtok(NULL, ":");
colonCounter=colonCounter+1;
}

if(colonCounter == 6)
{

// printf("FUNGERAR ID: %d NAMN %s \n", tempuid, firstNode->uname);

}
printf("%d Row is done \n", i);
i=i+1;
nameCounter = nameCounter+1;
colonCounter = 0;



}



}

但是当我写出来时,我得到:

1 Namnordning mr 
NAMNET: mr
mr
x
1171
IDN: 1171
firstNodeid 1171 1101
Mikael R�nnar
/Home/staff/mr
/usr/local/bin/tcsh

1 Row is done
2 Namnordning axelsson
NAMNET: axelsson
axelsson
x
12856
IDN: 12856
firstNodeid 12856 1101
Bj�rn Axelsson
/Home/staff/axelsson
/usr/local/bin/tcsh

2 Row is done
3 Namnordning gabriel
NAMNET: gabriel
gabriel
x
16928
IDN: 16928
firstNodeid 16928 1101
Gabriel Jonsson
/Home/staff/gabriel
/usr/local/bin/tcsh

3 Row is done
4 Namnordning set
NAMNET: set
set
x
12037
IDN: 12037
firstNodeid 12037 1101
Set Norman
/Home/staff/set
/usr/local/bin/tcsh

4 Row is done
5 Namnordning dahlin
NAMNET: dahlin
dahlin
x
12928
IDN: 12928
firstNodeid 12928 1101
Fredrik Dahlin
/Home/staff/dahlin
/usr/local/bin/tcsh

5 Row is done
6 Namnordning fahlgren
NAMNET: fahlgren
fahlgren
x
17847
IDN: 17847
firstNodeid 17847 1101
Daniel Fahlgren
/Home/staff/fahlgren
/usr/local/bin/tcsh
6 Row is done

为什么我也在那里接到 1101?另一个 tempuid 部分只给我正确的 ID。是不是我内存定位不对? (我一直在尝试,但它只会给我带来奇怪的错误,其中包含 idsize 部分)。

最佳答案

这是因为你在调用后没有刷新打印缓冲区

printf("firstNodeid %d", firstNode->uid);

printf 存储字符缓冲区,而不是在获取字符串后立即将字符串写入标准输出,以避免调用较低级别的开销 write功能过于频繁。

而是调用:

printf("firstNodeid %d\n", firstNode->uid);

应该解决您的问题,因为 "\n" 会向字符串添加换行符,并刷新输出。

编辑:您还应该小心类型。您将 tempuid 定义为 int:

int tempuid=atoi(temporaryString);
// idstorlek = sizeof(tempuid);
// firstNode->uid = malloc(4);
printf(" IDN: %d \n", tempuid);
firstNode->uid = tempuid;
printf("firstNodeid %d", firstNode->uid);

但是在节点结构中将其定义为unsigned int

关于c - 打印出额外的数字? (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33174127/

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