匿名質問者

C言語についての質問です。

Mac,gccを使用しています。
入力された文字が数字ならint型に変更して表示、
文字ならchar型の変数に格納して表示(それ以外なら空白を表示)
するプログラムを作ったのですが、例えば123abcと入力すると、
123233abcと表示されてしまいます。(123abcと表示してほしいのですが...)
(ファイル名はtest14.c)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(){
char str[64] = {};
fgets(str,sizeof(str),stdin);
for(int i = 0;i < 64;i++){
if(isdigit(str[i])){
int num;
sscanf(&str[i],"%d",&num);
printf("%d",num);
} else if(isalpha(str[i])){
char moji = str[i];
printf("%c",moji);
} else if(str[i] == '\n') {
break;
} else {printf(" ");}
}
printf("\n");
return 0;
}

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2020/04/07 16:17:05

ベストアンサー

匿名回答1号 No.1

// test14.c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

int main(void){
    char str[64]; // = {};
    char buf[12];
    int i,num;
    char moji;
    
    fgets(str,sizeof(str),stdin);
    for( i = 0; i < 64; i++){
        if(isdigit(str[i])){
            //int num;
            sscanf(&str[i],"%d",&num);
            printf("%d",num);
            snprintf(buf,12,"%d",num);
            i+=strlen(buf)-1;           
        } else if(isalpha(str[i])){
            //char moji = str[i];
            moji = str[i];
            printf("%c",moji);
        } else if(str[i] == '\0') {
            break;
        } else {
            printf(" ");
        }
    }
    printf("\n");
    return 0;
 }
他1件のコメントを見る
匿名回答1号

 sscanf(&str[i],"%d",&num);が「123abc」を「123」まで一気に読み込むので、その分、カウンターiを進めておく。
そうしないと、次、「23abc」を「23」まで読み込む。(ry

2020/04/07 14:30:07
匿名質問者

sscanfは一気に読み込んでしまうのですね。肝に命じておきます。
二回も質問に答えてくださり、ありがとうございました。

2020/04/07 16:16:56
  • 匿名回答2号
    匿名回答2号 2020/04/08 21:24:04
    コードを共有していただきありがとうございます。 うまくいきましたが、少し変更したいと思います。 整数値を受け取りたいだけです。 キャラクターはいらない。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません