gpt4 book ai didi

c - 输入文件作为参数时出现段错误 [C 语言]

转载 作者:行者123 更新时间:2023-11-30 15:15:42 24 4
gpt4 key购买 nike

我在程序中使用 fgets 和一些中断条件进行简单的读取,并且出于某种原因,当我使用以下命令编译和运行程序时./程序 < 输入.txt它出现了段错误。

但是当我运行程序时。/程序并粘贴与输入文件相同的内容,它可以正常运行。

这是我正在使用的代码:

void readInput()
{
char lote[20], str[505];
char *msg;
int par, ord, k;
scanf("%d", &k);

while(1)
{
__fpurge(stdin);
fgets(lote, 20, stdin);
if (strcmp(lote, "-1\n") == 0)
break;
while(1)
{
__fpurge(stdin);
fgets(str, 505, stdin);
if(strcmp(str, "Fim\n") == 0)
break;
par = atoi(strtok(str, ";"));
ord = atoi(strtok(NULL, ";"));
msg = strtok(NULL, "\n");
printf("Par = %d/Ordem = %d/Mensagem=%s\n", par, ord, msg);

}
}
}

编辑:这是输入文件:

10
Lote 1
3;2;Estou fazendo agora
0;1;Olá, tudo bem com você?
1;2;Não
1;1;Você vem jantar hoje?
0;2;Tudo sim e você?
1;3;Vou ter que trabalhar até mais tarde
2;4;se você lembrar
3;1;Conseguiu fazer o TP?
3;3;Esta muito fácil
Fim
Lote 2
2;2;Vou
2;3;leva na aula amanha
0;3;Tudo bem tbm
4;2;Parabéns! Que dia vamos comemorar?
2;1;Vai precisar da grana?
4;1;Passei no vestibular!
3;4;Esta mesmo
Fim
-1

最佳答案

看起来 __fpurge 是这里的罪魁祸首。它正在刷新整个输入缓冲区。它通过将行粘贴到控制台中来工作的原因是一次仅读取一行,而使用输入重定向可以一次输入整个内容。

scanf 之后,对 getchar 进行一次调用以吸收缓冲区中剩余的换行符。然后摆脱 __fpurge 调用,它应该可以工作。

关于c - 输入文件作为参数时出现段错误 [C 语言],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33426143/

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