簡體   English   中英

打開標題為int和char變量的文件

[英]Opening a file with a title including int and char variables

我想打開一個標題為“ File 10-9B-g06.dat”的文件,其中對所有文件重復“ B”和“ File”,但其余都是可變的。 問題開始於標題中有“ g”的地方。 我將“ g”變量用作字符串,但效果不佳。

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

int main()
{
 int CaseSize, Type, Counter;
 char name[100], zahl[20], char Template[1];

FILE *stream;

scanf("%d", &CaseSize );
scanf("%d", &Type );
scanf("  %c", &Template );
scanf("%d", &Counter );

strcpy(name, "File ");
sprintf(zahl, "%d", CaseSize);
strcat(name, zahl);
strcat(name, "-");
sprintf(zahl, "%d", Type);
strcat(name, zahl);
strcat(name, "B-");
sprintf(name, "%c", Template);
strcat(name, zahl);

sprintf(zahl, "%2d", Counter);
strcat(name, zahl);
strcat(name, ".dat");
stream=fopen(name, "a");

fclose(stream);
return 0;
}

我想知道是否有人可以幫助我解釋這個問題,或者他們是否可以引導我到任何我可以瀏覽的示例中。

謝謝。

該代碼在格式說明符和數據類型方面存在許多問題,但除此之外,效率極低且不必要地復雜。

char Template[1]更改為char Template ,並刪除多余的zahl[] ,用於構造name的12行代碼可以簡化為:

sprintf( name, "%s %d-%dB-%c%02d.dat", "File", CaseSize, Type, Template, Counter ) ;

C字符串的一個問題是它們不包含長度信息,因此諸如strcat()函數必須從開始搜索nul終止符開始進行迭代。 在這里,您在越來越長的字符串上重復使用strcat() 因此,在這種短弦構造中,可能並不重要,但在某些情況下,它可能會變得過慢 除此之外,更多行代碼僅意味着需要維護和調試更多代碼。 在這里,整個格式在一行代碼中進行了描述,因此維護起來很容易就能看出應該構造什么。

第一個問題似乎是在讀取變量Template時在scanf中使用空格。 在此處查看提示: C scanf出現空格問題

兩個主要問題是:

scanf(“%c”,&Template);

應該

scanf("  %c", &Template[0]);

sprintf(name,“%c”,模板);

應該

sprintf(zahl, "%c", Template[0]);

經過一點測試,這可行:

int main()
{
  int CaseSize, Type, Counter;
  char name[100];
  char zahl[20];
  char Template;

  FILE *stream;

  scanf("%d", &CaseSize);
  scanf("%d", &Type);
  scanf(" %c", &Template);
  scanf("%2d", &Counter);

  strcpy(name, "File ");
  sprintf(zahl, "%d", CaseSize);
  strcat(name, zahl);
  strcat(name, "-");
  sprintf(zahl, "%d", Type);
  strcat(name, zahl);
  strcat(name, "B-");
  sprintf(zahl, "%c", Template);
  strcat(name, zahl);

  sprintf(zahl, "%02d", Counter);
  strcat(name, zahl);
  strcat(name, ".dat");
  printf("%s\n", name);
  stream=fopen(name, "a");
  fclose(stream);
  return 0;
}

您可以在一個sprintf語句中完成所有操作:

sprintf( name, "File %d-%dB-%c%02d.dat", CaseSize, Type, Template, Counter );

鑒於您使用Template ,您不應將其聲明為char的1元素數組; 表達式&TemplateTemplate的類型分別為char (*)[1]char * ,這不是您想要的。 改為將其聲明為純char

暫無
暫無

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

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