簡體   English   中英

C中的字符串掃描打印問題

[英]Problem with scanning and printing strings in C

我正在嘗試讀取每行文件中具有相同數據模式的文件。 數字打印正確,但字符串打印不正確 - 它打印第一個字母的次數比它應該打印的次數多(兩個字符串)。 我實際上是編程新手,我很難理解 arrays。 謝謝你的幫助

#include <stdio.h>
#include <stdlib.h>

int main ( void )
{
int  kamera[1000], den[1000], hodina[1000], minuta[1000];
char registracka[1000], mesic[1000];
int i = 0;

while(!feof(stdin))
{
    scanf("%d: %s %s %d %d: %d", &kamera[i], &registracka[i], &mesic[i], &den[i], &hodina[i], &minuta[i]);
    i=i+1;
}
i = 0;
printf("%d: %s %s %d %d:%d\n",kamera[i], &registracka[i], &mesic[i], den[i], hodina[i], minuta[i]);
printf("%d: %s %s %d %d:%d\n",kamera[i+1], &registracka[i+1], &mesic[i+1], den[i+1], hodina[i+1], minuta[i+1]);
printf("%d: %s %s %d %d:%d\n",kamera[i+2], &registracka[i+2], &mesic[i+2], den[i+2], hodina[i+2], minuta[i+2]);
printf("%d: %s %s %d %d:%d\n",kamera[i+3], &registracka[i+3], &mesic[i+3], den[i+3], hodina[i+3], minuta[i+3]);
printf("%d: %s %s %d %d:%d\n",kamera[i+4], &registracka[i+4], &mesic[i+4], den[i+4], hodina[i+4], minuta[i+4]);
printf("%d: %s %s %d %d:%d\n",kamera[i+5], &registracka[i+5], &mesic[i+5], den[i+5], hodina[i+5], minuta[i+5]);
printf("%d: %s %s %d %d:%d\n",kamera[i+6], &registracka[i+6], &mesic[i+6], den[i+6], hodina[i+6], minuta[i+6]);
return 0;
}

我的輸入:

10: ABC-12-34 Oct 1 7:30
10: ABC-12-34 Oct 1 7:30
10: ABC-12-34 Oct 1 7:30
10: ABC-12-34 Oct 1 7:30
10: ABC-12-34 Oct 1 7:30
10: ABC-12-34 Oct 1 7:30

我想要的 output:

10: ABC-12-34 Oct 1 7:30
10: ABC-12-34 Oct 1 7:30
10: ABC-12-34 Oct 1 7:30
10: ABC-12-34 Oct 1 7:30
10: ABC-12-34 Oct 1 7:30
10: ABC-12-34 Oct 1 7:30

output 我得到:

10: AAAAAAABC-12-34 OOOOOOOct 1 7:30
10: AAAAAABC-12-34 OOOOOOct 1 7:30
10: AAAAABC-12-34 OOOOOct 1 7:30
10: AAAABC-12-34 OOOOct 1 7:30
10: AAABC-12-34 OOOct 1 7:30
10: AABC-12-34 OOct 1 7:30
10: ABC-12-34 Oct 1 7:30

這是不正確的:

scanf("%d: %s %s %d %d: %d", &kamera[i], &registracka[i], &mesic[i]...

mesicregistracka是字符的 arrays,而不是字符串的 arrays。 每次從輸入中讀取字符串時,該字符串中的字符都會被復制到偏移量 i 處的字符緩沖區中。

更好的。 將 mesic 和 registracka 聲明為 char 指針的 arrays。

char* registracka[1000] = {0};  // replace 1000 with the maximum number of lines you expect
char* mesic[1000] = {0};

然后為要掃描字符的每個字符串分配足夠大的緩沖區。

while(!feof(stdin))
{
    registracka[i] = malloc(BIG_ENOUGH+1);
    mesic[i] = malloc(BIG_ENOUGH+1);

    scanf("%d: %s %s %d %d: %d", &kamera[i], registracka[i], mesic[i], &den[i], &hodina[i], &minuta[i]);
    i=i+1;
}

其中BIG_ENOUGH是您希望讀取的最長字符串。

請注意對scanf參數的調整(刪除了與 registracka 和 mesic 的符號)

您的 printf 語句需要類似的處理:

printf("%d: %s %s %d %d:%d\n",kamera[i+1], registracka[i+1], mesic[i+1], den[i+1], hodina[i+1], minuta[i+1]);

完成打印后不要忘記釋放字符串

for (int j = 0; j < i; j++)
{
     free(registracka[j]); 
     registracka[j]=NULL;

     free(mesic[j]);
     mesic[j] = NULL:
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM