[英]Why aren't consecutive fgets and sscanf working after the first input
我知道已經有一些與此類似的問題,但在我的情況下,我真的不明白我做錯了什么。
我必須收集 5 個變量,3 個是可以多於一個單詞的字符串,另外 2 個是整數。
這是針對我需要上交的程序,並且輸入需要與我在下面發布的完全相同。
我還需要專門使用 sscanf 和 fgets 而不是 scanf 或 getchar()。
int main()
{
char linha[200];
char * nome;
char * autor;
char * genero;
char anoChar[200];
int * ano;
char duracaoChar[200];
int * duracao;
printf(">");
fgets(linha, sizeof linha, stdin);
sscanf(linha, "%[^\n]", nome);
fgets(linha, sizeof linha, stdin);
sscanf(linha, "%[^\n]", autor);
fgets(linha, sizeof linha, stdin);
sscanf(linha, "%[^\n]", genero);
fgets(linha, sizeof linha, stdin);
sscanf(linha, "%[^\n]", anoChar);
*ano=atoi(anoChar);
fgets(linha, sizeof linha, stdin);
sscanf(linha, "%[^\n]", duracaoChar);
*duracao=atoi(duracaoChar);
printf("%s %s %s %d %d", nome, autor, genero, ano, duracao);
return 0;
}
我已經嘗試輸入每個示例:
Dreams
Singer
pop
1970
10
但它會停止閱讀“夢想”並關閉程序
這些變量:
char * nome;
char * autor;
char * genero;
int * ano;
int * duracao;
可能是你的問題。 它們是在第一次使用之前尚未初始化的指針,因此在調用它們的第二次調用未定義的行為。 這意味着它們可能指向 memory 可能已經分配給另一個進程使用,或者更糟糕的是可能指向 memory 當前未使用,因此允許訪問 go 使您的代碼可見,但確實沒有問題滴答作響的定時炸彈。
要么使用 arrays,
char nome[80]={0};
char autor[80]={0};
char genero[80]={0};
... etc.
或初始化指向某物的指針:
char * nome = malloc(80);
if(nome)
{... //test before using allocated memory
//... do same with others
@pmg 建議將指針更改為 arrays 並且它有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.