Tag: fgets

为什么fgets没有输入第一个值?

我正在编写一个程序来快速编写我的html文件。 当我来写我的页面内容时,我遇到了问题。 #include int main() { int track; int question_no; printf(“\nHow many questions?\t”); scanf(“%d”,&question_no); char question[question_no][100]; for(track=1;track<=question_no;track++) { printf("\n%d. “,track); printf(“\nQuestion number %d.\t”,track); fgets(question[track-1],sizeof(question[track-1]),stdin); printf(“\n\n\tQ%d. %s “,track,question[track-1]); } } 在这个程序中,我正在写一些问题及其答案(在html文件中)。 当我测试运行这个程序时,我将question_no的值输入到3.但是当我输入我的第一个问题时,它没有question[0] ,因此第一个问题没有输出。 其余的问题输入没有问题。 我在stackoverflow上搜索了一些问题,发现fgets()查找最后的\0字符,并且\0停止它。 我还发现我应该使用缓冲区通过fgets()输入,所以我使用: setvbuf和setbuf但也没有用(我可能编码错了)。 在我的第一个和最后一个(以及) scanf语句之后我也使用了fflush(stdin)从stdin中删除任何\0字符,但这也没有用。 有没有办法接受fgets()的第一个输入? 我现在正在使用stdin和stdout。 我不访问,读取或写入任何文件。

如何使用select从stdin读取输入?

我试图使用select从stdin读取,之后我通过套接字将数据发送到服务器。 以下片段应遵循上述逻辑; 但它没有从stdin读取任何内容。 此外,它打印Enter command:用户第一次输入字符串后。 行printf(“%d %s\n”,__LINE__ ,buf); 也不打印任何东西。 fd_set rfds; struct timeval tv; int retval; char buf[BUFLEN]; while(1) { FD_ZERO(&rfds); FD_SET(STDIN_FILENO, &rfds); tv.tv_sec = 5; tv.tv_usec = 0; retval = select(STDIN_FILENO + 1, &rfds, NULL, NULL, &tv); if (FD_ISSET(STDIN_FILENO, &rfds)) { if (fgets(buf,BUFLEN, stdin)) { printf(“%d %s\n”,__LINE__ ,buf); if (strncmp(buf, “exit”, 4) == 0) […]

在C中使用“gets”表示String输入

我一直试图从用户使用fgets获取字符串输入,但fgets不等待输入,所以在投资时我了解到似乎工作正常的getsfunction。 我的问题是:1。如果我输入超过10个字符,如果我声明只有十个元素的数组,为什么gets工作。 这是我的代码 #include int main(void){ char name[10]; printf(“Please enter your name: “); gets(name); printf(“\n”); printf(“%s”, name); return 0; } 我在测试时的输入:morethantenletters 将输出:’morethantenletters’ 当然,这应该会导致一些错误,不是吗? 由于name只有十个元素长。 2.我的下一个问题是,当我使用gets(&name)而不是gets(name)时,我的代码也可以工作 – 我不明白为什么。 &name发送&name的地址。 虽然name只是发送它的价值,不是吗?

有关换行和fgets()的查询

代码1: – int main() { char str[200]; fgets(str,200,stdin); printf(“%s”,str); return 0; } 输出: – ab cd ab cd (line feed) 代码2: – int main() { char str[200]; gets(str); printf(“%s”,str); return 0; } 输出: – ab cd ab cd 当我输入ab(space)cd(enter key) ,然后在fgets()情况下,我在输出中获得line feed ,而在gets()情况下,没有显示新换行符。 在这种情况下line feed的问题是什么。

为什么从文件函数读取崩溃?

试图从文件中读取多行以将它们存储在由字符串元素组成的结构中,但是当我运行程序时它只是崩溃而我不知道原因。 有问题的function: Hashtbl* loadfromfile(Hashtbl* hashtbl, char *path){ int i = 0; char line[100]; char* string[40]; FILE *f = fopen(path, “r”); if(f == NULL){ printf(“FILE NO FOUND!”); }else{ while(fgets(line, sizeof(line), f)!=NULL){ strcpy(string[i],line); i++; } fclose(f); for(i = 0; i<(SIZE*2); i++){ strcpy(hashtbl[i].subscript, string[i]); i++; } for(i = 1; i<(SIZE*2); i++){ strcpy(hashtbl[i].value, string[i]); i++; } return hashtbl; } […]

fgets和sscanf

这段代码应该从一个finput文件中获取整数并对其进行排序,并获取文件中的第一个整数,该整数是要排序的整数,后面的整数是要排序的整数。 我不知道fgets和sscanf是如何协同工作的。 有人可以解释fgets和sscanf在这段代码中是如何工作的吗? FILE *finput; int *array_int, c1, no_elem; char numlines[500]; fgets(numlines, 500, finput); array_int = (int *)malloc(sizeof(int)*no_elem); if ((sscanf(numlines, “%d”, &no_elem) == 1) && array_int!= NULL) { for(c1=0; fgets(numlines, 500, finput) != NULL; ) { if (sscanf(numlines, “%d”, &array_int[c1])==1) { ++c1; } } }

如何在循环中使用fgets和sscanf作为整数

这里有C的初学者。 我试图运行一个循环,其中字符串和ints输入struct各个字段。 当提示输入“姓氏”时,用户可以在没有其他输入的情况下按Enter键,循环应该结束。 问题是,使用此代码,循环不会结束(姓氏和名字条目请求在同一行上一起运行)并且薪水的值总是出错(0或某些大数字) while (employee_num <= 2) { printf("Enter last name "); fgets(employee[employee_num].last_name, sizeof(employee[employee_num].last_name), stdin); if(strlen(employee[employee_num].last_name) == 0) break; printf("Enter first name "); fgets(employee[employee_num].first_name, sizeof(employee[employee_num].first_name), stdin); printf("Enter title "); fgets(employee[employee_num].title, sizeof(employee[employee_num].title), stdin); printf("Enter salary "); fgets(strng_buffer, 1, stdin); sscanf(strng_buffer, "%d", &employee[employee_num].salary); ++employee_num; getchar(); } 如果我尝试使用此代码,我可以在第一次运行后正确退出循环,但在此之后无法退出(通过在姓氏部分按Enter键 – 也许是\ n我似乎无法清除?): char strng_buffer[16]; while (employee_num <= 5) […]

是否有一个很好的替代fgets?

我只是一名年轻的计算机科学专业的学生,​​目前我对从stdin读取字符串的最佳做法感到困惑。 我知道有很多方法可以做到这一点,有些方法比其他方法更安全,等等……我目前需要一个防止缓冲区溢出的函数,并在末尾添加一个空终止符(\ 0)的字符串。 我发现fgets对此非常有用,但是…它会停止用\ n或EOF读取! 如果我希望用户一次输入多行,该怎么办? 还有其他function可以帮助我做到这一点吗? 对不起,如果这个问题对你们中的某些人来说似乎很愚蠢,那么请理解我! 任何帮助,将不胜感激。

在fgets While循环时检测EOF

我使用fdopen和fgets循环遍历TCP套接字输入的每一行: int connfd = accept(listenfd, (struct sockaddr*)NULL, NULL); FILE *f; char line[1024]; f = fdopen(connfd, “a+”); while(fgets(line, sizeof(line), f) != NULL) { printf(“%s”, line); } printf(“EOF”); fclose(f); 问题是,由于某些奇怪的原因, fgets似乎永远不会返回NULL 。 有没有其他方法来检查EOF ?

使用fgets()检测EOF,其中filesteam是stdin

一点背景,我正在编写一个程序,它在linux命令行中运行游戏“盒子”并用C语言编写。有一个等待用户输入的提示,然后用fgets()读取并解释等。 作为任务规范的一部分,如果我在等待用户输入时达到“文件结束”,则必须返回特定错误。 我知道fgets()在达到EOF时会返回null …但是我说 fgets(input,max_buffer,stdin); 在提示循环中如果用户提前退出用CTRL + C或CTRL + D说这是否意味着输入== NULL? 我甚至可以检测用户何时使用fgets执行此操作? 只是想试试这个问题,提前感谢任何帮助。 (OS:UNIX)(编译:gcc – c90)