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;
}
// 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; }
sscanf(&str[i],"%d",&num);が「123abc」を「123」まで一気に読み込むので、その分、カウンターiを進めておく。
2020/04/07 14:30:07そうしないと、次、「23abc」を「23」まで読み込む。(ry
sscanfは一気に読み込んでしまうのですね。肝に命じておきます。
2020/04/07 16:16:56二回も質問に答えてくださり、ありがとうございました。