ページ 11

Char型の扱い方

Posted: 2013年10月09日(水) 23:32
by TOYTOY
初めまして。C言語を習いたてで、どうしても「構造体とfor文を使って以下の実行結果を得たい」のですが文字列の扱い方がわからず思うようにいきません。

求める実行結果
No.1 No.2 No.3 No.4 ・・・・・・・ No.30

自分で一度考えてみたコードを簡略化してここに書きます。

コード:

#include <stdio.h>
#define NUM_MAX 30

typedef struct
{
	char name[128];
} NumCounter_t;

NumCounter_t NumCount[ NUM_MAX ];

void Initialize()
{
	for(int i=0;i<NUM_MAX;i++)
		NumCount[i].name[128] = ("NO. %d",i+1);
}

int main (void)
{
	Initialize();

	for(int i=0;i<NUM_MAX;i++)
	{
		printf("%s ",NumCount[i].name);
	}


	return 0;
}
実行すると文字化けが続きます。
Char型の使い方がおかしいのでしょうけれど直し方がわからなくて困っております。
できるだけこのようなプログラム構成のまま直したいのですがどこをどうすればよいでしょうか。よろしくお願いします。

Re: Char型の扱い方

Posted: 2013年10月09日(水) 23:34
by みけCAT

コード:

NumCount[i].name[128] = ("NO. %d",i+1);

コード:

sprintf(NumCount[i].name,"No.%d",i+1);
ですね。

Re: Char型の扱い方

Posted: 2013年10月09日(水) 23:50
by みけCAT
自分も実装してみました。

コード:

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

#define NUM_MAX 30

#define PREFIX_MAX 32
typedef struct {
	char prefix[PREFIX_MAX];
	int number;
} Number_t;

void setPrefixAndNumber(Number_t* target,const char* prefix,int number) {
	if(target==NULL || prefix==NULL)return;
	if(strlen(prefix)<PREFIX_MAX)strcpy(target->prefix,prefix); else target->prefix[0]='\0';
	target->number=number;
}

void printNumberWithPrefix(const Number_t* target) {
	if(target==NULL)return;
	printf("%s%d",target->prefix,target->number);
}

int main(void) {
	Number_t number[NUM_MAX];
	int i;
	for(i=0;i<NUM_MAX;i++)setPrefixAndNumber(&number[i],"No.",i+1);
	for(i=0;i<NUM_MAX;i++) {
		printNumberWithPrefix(&number[i]);
		putchar(i+1<NUM_MAX?' ':'\n');
	}
	return 0;
}

Re: Char型の扱い方

Posted: 2013年10月10日(木) 00:46
by TOYTOY
みけCATさん、迅速な回答ありがとうございます。ご指摘のとおりにしたらできました!
まだまだ知らない関数がたくさんなので、今回の回答を参考に頑張って学びます!