[英]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], ®istracka[i], &mesic[i], &den[i], &hodina[i], &minuta[i]);
i=i+1;
}
i = 0;
printf("%d: %s %s %d %d:%d\n",kamera[i], ®istracka[i], &mesic[i], den[i], hodina[i], minuta[i]);
printf("%d: %s %s %d %d:%d\n",kamera[i+1], ®istracka[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], ®istracka[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], ®istracka[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], ®istracka[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], ®istracka[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], ®istracka[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], ®istracka[i], &mesic[i]...
mesic
和registracka
是字符的 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.