fgetsで文字列取得後ずれる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
shosinsha

fgetsで文字列取得後ずれる

#1

投稿記事 by shosinsha » 7年前

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;
}


shosinsha

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

#2

投稿記事 by shosinsha » 7年前

3   ・・・・もじれつの総数
0   ・・・・配列番号
1    ・・・同上
SET 1 10   もじれつ これが0に入ってほしい
2
SET 2 20
ちなみにこれが実行結果です

shosinsha

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

#3

投稿記事 by shosinsha » 7年前

調べたところ、過去記事に似たものを発見しました
getchar();を入れることで、
a[0]に文字列が入るときと入らない時があるのはなぜでしょうか

shosinsha

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

#4

投稿記事 by shosinsha » 7年前

#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;
}

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

shosinsha

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

#5

投稿記事 by shosinsha » 7年前

確認したところ、配列にもじれつはずれずにはいるようになりました。

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

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#6

投稿記事 by みけCAT » 7年前

shosinsha さんが書きました:

コード:

    // 自分の得意な言語で
    // Let's チャレンジ!!
paizaっぽいコメントですね。
不正ではないでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

shosinsha

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

#7

投稿記事 by shosinsha » 7年前

制限時間とか考えれば、純粋にしつもんをしていることがわかると思います

box
記事: 2002
登録日時: 13年前

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

#8

投稿記事 by box » 7年前

shosinsha さんが書きました: しかし、計算がうまく行われないときと、うまくいくときがあります。
何を入力したときにうまくいって、
何を入力したときにうまくいかないのか、
具体例を1個以上挙げてください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

shosinsha

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

#9

投稿記事 by shosinsha » 7年前

3 ←文字列のかず
set 1 10
set 2 20
add 40
が入力され
10 50が表示されるときとされないときがあります

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

shosinsha

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

#10

投稿記事 by shosinsha » 7年前

ちなみにうまくいかないときは

0 0

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

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

shosinsha

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

#11

投稿記事 by shosinsha » 7年前

自力で解決しました

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

閉鎖

“C言語何でも質問掲示板” へ戻る