gpt4 book ai didi

c - 为什么我的函数不等待输入?

转载 作者:太空宇宙 更新时间:2023-11-03 23:53:38 25 4
gpt4 key购买 nike

我编写了一个函数,它读取一个未知长度的字符串,直到按下 Enter 并返回一个 char 指针。当我从 switch case 内部调用该函数时,它不会等待我的输入。

char *get_paths()
{
unsigned int length_max = 256; /*Initial length of string*/
unsigned int current_size;
current_size = length_max;

/* Allocating memory for string input */
char *tmpStr = malloc(length_max);

/* Simple check to make sure our pointer is not NULL */
if(tmpStr != NULL)
{
int c = EOF;
unsigned int i = 0;

printf("Enter The EXACT or RELATIVE File Paths Separated by a Space: ");

/* Accept input until Enter key is pressed or user inserts EOF */
while((c = getchar()) != '\n' && c != EOF)
{
tmpStr[i] = (char)c;
++i;

/* If memory is filled up, reallocate memory with bigger size */
if(i == current_size)
{
current_size = i + length_max;
/* realloc does magic */
tmpStr = realloc(tmpStr, current_size);
}
}

/* A valid string always end with a '\0' */
tmpStr[i] = '\0';
printf("Got it: %s \n", tmpStr); /*TODO: REMOVE;; USED FOR TESTING*/
return tmpStr;
}
}

switch case(我在 switch block 中有一个 char *ptr = NULL):

/*File input*/
case 1:
ptr = get_filepaths();
break;

输出:

Enter The EXACT or RELATIVE File Paths Separated by a Space: Got it:

最佳答案

您很可能在 stdout 上遇到缓冲问题,这是 printf 的默认设置。您需要显式刷新 stdout 或在第一个 printf 语句末尾放置一个换行符,以强制刷新缓冲区。由于在“知道”语句的末尾有一个换行符,因此两个语句(第一个被缓冲)同时打印到输出,因为第二个语句强制刷新缓冲区。

另一种可能是 stdin 中可能已经有未读数据,当你在 while 循环中调用 getchar() 时,它读取先前缓冲的数据,点击换行符,然后退出循环,而不是让您输入新信息。为避免该问题,请执行 scanf("%*[^\n]%*c"); 之类的操作,以便将输入消耗到已经存在的下一个换行符(包括换行符本身)输入而不用担心缓冲区溢出。

关于c - 为什么我的函数不等待输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13666131/

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