ページ 11

fgetsで文字列取得後ずれる

Posted: 2016年9月24日(土) 14:18
by shosinsha
fgetsで文字列を入れたんですがa[0]じゃなくてa[1]から埋まっていくんですがなぜでしょうか

コード:

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

int main(void){
    // 自分の得意な言語で
    // Let's チャレンジ!!
    int n;
    char s[10][12];
    char a[5];
    int i,j;
    int v1,v2;
    
    scanf("%d",&n);
    printf("%d\n",n);
    for(i=0;i<n;i++){
        fgets(s[i],sizeof(s[i]),stdin);
        printf("%d\n",i);
        printf("%s",s[i]);
    }
    for(i=0;i<n;i++){
        if(s[i][1]=='E'){
            for(j=0;a[j]!='\0';j++){
                a[j] = s[i][6+j];
            }
            if(s[i][4]=='1') v1 = atoi(a);
            else v2 = atoi(a);
        }else{
            for(j=0;a[j]!='\0';j++){
                a[j] = s[i][4+j];
            }
            if(s[i][1]=='D') v2 = v1 + atoi(a);
            else v2 = v1 - atoi(a);
        }
    }
    //printf("%d %d\n",v1,v2);
    return 0;
}


Re: fgetsで文字列取得後ずれる

Posted: 2016年9月24日(土) 14:20
by shosinsha
3   ・・・・もじれつの総数
0   ・・・・配列番号
1    ・・・同上
SET 1 10   もじれつ これが0に入ってほしい
2
SET 2 20
ちなみにこれが実行結果です

Re: fgetsで文字列取得後ずれる

Posted: 2016年9月24日(土) 14:29
by shosinsha
調べたところ、過去記事に似たものを発見しました
getchar();を入れることで、
a[0]に文字列が入るときと入らない時があるのはなぜでしょうか

Re: fgetsで文字列取得後ずれる

Posted: 2016年9月24日(土) 14:50
by shosinsha
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(void){
// 自分の得意な言語で
// Let's チャレンジ!!
char num[100];
int n;
char s[10][15];
char a[5];
int i,j;
int v1,v2;

fgets(num,sizeof(num),stdin);
n = atoi(num);
for(i=0;i<n;i++){
fgets(s,sizeof(s),stdin);
if(isupper(s[0])==0) i--;

}
for(i=0;i<n;i++){
if(s[1]=='E'){
for(j=0;a[j]!='\0';j++){
a[j] = s[6+j];
}
if(s[4]=='1') v1 = atoi(a);
else v2 = atoi(a);
}else{
for(j=0;a[j]!='\0';j++){
a[j] = s[4+j];
}
if(s[1]=='D') v2 = v1 + atoi(a);
else v2 = v1 - atoi(a);
}
}
printf("%d %d\n",v1,v2);
return 0;
}

あがいている現在の結果です
うまくいくときといかないときがあります

Re: fgetsで文字列取得後ずれる

Posted: 2016年9月24日(土) 15:13
by shosinsha
確認したところ、配列にもじれつはずれずにはいるようになりました。

しかし、計算がうまく行われないときと、うまくいくときがあります。

Re: fgetsで文字列取得後ずれる

Posted: 2016年9月24日(土) 16:46
by みけCAT
shosinsha さんが書きました:

コード:

    // 自分の得意な言語で
    // Let's チャレンジ!!
paizaっぽいコメントですね。
不正ではないでしょうか?

Re: fgetsで文字列取得後ずれる

Posted: 2016年9月24日(土) 17:05
by shosinsha
制限時間とか考えれば、純粋にしつもんをしていることがわかると思います

Re: fgetsで文字列取得後ずれる

Posted: 2016年9月24日(土) 17:30
by box
shosinsha さんが書きました: しかし、計算がうまく行われないときと、うまくいくときがあります。
何を入力したときにうまくいって、
何を入力したときにうまくいかないのか、
具体例を1個以上挙げてください。

Re: fgetsで文字列取得後ずれる

Posted: 2016年9月24日(土) 17:45
by shosinsha
3 ←文字列のかず
set 1 10
set 2 20
add 40
が入力され
10 50が表示されるときとされないときがあります

fgetsを使うと配列[0]からはいってるんでしょうか?

Re: fgetsで文字列取得後ずれる

Posted: 2016年9月24日(土) 17:49
by shosinsha
ちなみにうまくいかないときは

0 0

となります。fgetsでズレがあるんでしょうか?

今からバイトなのでレス遅れます

Re: fgetsで文字列取得後ずれる

Posted: 2016年9月25日(日) 13:54
by shosinsha
自力で解決しました

for文で格納するのがおかしかったみたいで、
memcpyをつかってコピーをしたらできました。