【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21086

配列について
投稿者---ojima(2005/05/18 23:13:09)


配列についての質問です。

int x,y;
char str[3+1];
という変数、配列があります。

gets(str);
で文字列を読み込みます。

そこに例えばA18と入力します。
そのA18をx=A(65),y=18としたいのです。

自分はx=(int)str[0];
(i=1;i<3;i++){
str[i-1]=str[i]}
str[2]='\0';
y=atoi(str);

という感じで作ってみたのですがもっときれいにならないものでしょうか?
配列の[1][2]だけをyに代入するには上記の方法以外に
どのような感じで作れるでしょうか?






この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:配列について 21087 Blue 2005/05/18 23:18:11
<子記事> Re:配列について 21089 まきじ 2005/05/18 23:39:05
<子記事> Re:配列について 21091 G 2005/05/19 00:49:41


No.21087

Re:配列について
投稿者---Blue(2005/05/18 23:18:11)


atoiの引数は文字列ポインタなので
y = atoi( str + 1 );
とすれば 2文字目から'\0'までの文字列を変換対象としてくれます。

同様に str == &str[ 0 ] から
y = atoi( &str[ 1 ] );
としてもOKです。



この投稿にコメントする

削除パスワード

No.21089

Re:配列について
投稿者---まきじ(2005/05/18 23:39:05)


>char str[3+1];
3+1 にする意味はあるのでしょうか?

>gets(str);
オーバーフローするので、fgets(str,4,stdin) の方がよいと思います。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void){
    
    char str[10];
    int x, y;
    char *p;
    
    puts(">");
    fgets(str,4,stdin);
    
    p = strchr(str,'\n');
    if(p) *p = '\0';
    p = str;
    
    x = *p++;
    y = atoi(p);
    
    printf("x = %d\ny = %d\n",x,y);
    
    return EXIT_SUCCESS;
}




この投稿にコメントする

削除パスワード

No.21091

Re:配列について
投稿者---G(2005/05/19 00:49:41)


入力データのフォーマットが決まっているのであれば、
sscanf()を使ってみるのはどうでしょうか?

#include <stdio.h>

int main(void)
{
    int x = 0, y;
    char str[4];

    fgets(str, sizeof str, stdin);

    sscanf(str, "%c%d", &x, &y);

    printf("x = %d\ny = %d\n", x, y);

    return 0;
}




この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧