scanf()がforループ内で正しく機能しない

dkkl_codex

stdinからの複数の文字列を一時変数に格納しようとしています。

各文字列は、改行文字の後に入力されます。

これは私の試みです:

#include <stdio.h>
int main() {
    for (int i=0; i<10; i++) {
        char string;
        scanf("%s\n", &string);
        printf("%d\n", i);
    }
}

forループは意図したとおりに実行されず、2回だけループし、scanfがループに干渉しているようです。

stdin:

test
test

stdout:

7631717

stdinからの入力/各行をchar固定のサイズ/長さなしで変数に動的に格納する方法はありますか?

ブルーノ

文字列を読み取る特定のサイズに制限されないように、修飾子 'm'を使用できます。

char * p;

if (scanf("%ms", &p) == 1) {
  ...use p;
  free(p); /* when stop to be usefull
}

の男から scanf

オプションの「m」文字。これは文字列変換(%s、%c、%[)で使用され、入力を保持するために対応するバッファーを割り当てる必要性から呼び出し元を解放します。代わりに、scanf()は十分なサイズのバッファーを割り当て、アドレスを割り当てます。このバッファの対応するポインタ引数へのポインタ。これはchar *変数へのポインタである必要があります(この変数は呼び出し前に初期化する必要はありません)。その後、呼び出し元は、このバッファーが不要になったときに、このバッファーを解放(3)する必要があります。

前の方法では、「単語」を赤くして、先頭のスペース( ''、改行、タブ...)を削除して完全な行を読み取ることができます。

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

int main()
{
  char * p;

  if (scanf(" %m[^\n]", &p) == 1) {
    printf("'%s'\n", p);
    free(p);
  }
  else
    puts("error (EOF...)");
  
  return 0;
}

コンパイルと実行:

/tmp % gcc -Wall c.c
/tmp % ./a.out
    aze qsd
'aze qsd'
/tmp % ./a.out < /dev/null
error (EOF...)
/tmp % 

そのまま全行を読み取るための修飾子(posix ...ではない)がない場合は、次のことができます。

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

int main()
{
  char * p = malloc(1);
  size_t len = 0;
  int c;
  
  while (((c = getchar()) != '\n') && (c != EOF)) {
    p = realloc(p, len+1);
    if (p == NULL) {
      puts("not enough memory");
      return -1;
    }
    p[len++] = c;
  }
  p[len] = 0;
  
  printf("'%s'\n", p);
  free(p);
  
  return 0;
}

コンパイルと実行:

/tmp % gcc -Wall c.c
/tmp % ./a.out
  aze qsd
'  aze qsd'
/tmp % ./a.out < /dev/null
''
/tmp % 

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

R: 'この' for 'ループ内で'条件が正しく機能しない場合

分類Dev

Recyclerviewアダプター内で分割機能が正しく機能しない

分類Dev

reactsetstateがループで正しく機能しない

分類Dev

Pythonでwhileループが正しく機能しない

分類Dev

Pythonキーボードモジュールがループ内で正しく機能しない

分類Dev

whileループ内の複数の条件が正しく機能しない

分類Dev

スクロール可能なdiv内でブートストラップdatetimepickerが正しく機能しない

分類Dev

jqueryでループ/グループ化が正しく機能しない理由

分類Dev

scanfシングル文字がループで機能しない

分類Dev

array_splice()がループ内で正しく機能していません

分類Dev

JquerysetTimeoutがループ内で正しく機能していません

分類Dev

イベントハンドラーがループ内で正しく機能しない

分類Dev

Python、whileループが正しく機能していない

分類Dev

whileループが正しく機能していない

分類Dev

whileループが正しく機能していない

分類Dev

Forループがバッチファイルで正しく機能しない

分類Dev

ノードjsでループが正しく機能しない

分類Dev

Apache dbcp接続プールが正しく機能しない

分類Dev

Foreachループの位置が正しく機能しない

分類Dev

Forループが正しく機能しない

分類Dev

XPathNodeIteratorのForeachループが正しく機能しない

分類Dev

関数のループが正しく機能しない

分類Dev

cin in whileループが正しく機能しない(C ++)

分類Dev

whileループが正しく機能しない

分類Dev

Foreachループが正しく機能しない(PHP)

分類Dev

Matlabループが正しく機能しない

分類Dev

Forループが正しく機能しないjavascript

分類Dev

PHP / mySQL-forループが正しく機能しない

分類Dev

whileループが正しく機能しない

Related 関連記事

  1. 1

    R: 'この' for 'ループ内で'条件が正しく機能しない場合

  2. 2

    Recyclerviewアダプター内で分割機能が正しく機能しない

  3. 3

    reactsetstateがループで正しく機能しない

  4. 4

    Pythonでwhileループが正しく機能しない

  5. 5

    Pythonキーボードモジュールがループ内で正しく機能しない

  6. 6

    whileループ内の複数の条件が正しく機能しない

  7. 7

    スクロール可能なdiv内でブートストラップdatetimepickerが正しく機能しない

  8. 8

    jqueryでループ/グループ化が正しく機能しない理由

  9. 9

    scanfシングル文字がループで機能しない

  10. 10

    array_splice()がループ内で正しく機能していません

  11. 11

    JquerysetTimeoutがループ内で正しく機能していません

  12. 12

    イベントハンドラーがループ内で正しく機能しない

  13. 13

    Python、whileループが正しく機能していない

  14. 14

    whileループが正しく機能していない

  15. 15

    whileループが正しく機能していない

  16. 16

    Forループがバッチファイルで正しく機能しない

  17. 17

    ノードjsでループが正しく機能しない

  18. 18

    Apache dbcp接続プールが正しく機能しない

  19. 19

    Foreachループの位置が正しく機能しない

  20. 20

    Forループが正しく機能しない

  21. 21

    XPathNodeIteratorのForeachループが正しく機能しない

  22. 22

    関数のループが正しく機能しない

  23. 23

    cin in whileループが正しく機能しない(C ++)

  24. 24

    whileループが正しく機能しない

  25. 25

    Foreachループが正しく機能しない(PHP)

  26. 26

    Matlabループが正しく機能しない

  27. 27

    Forループが正しく機能しないjavascript

  28. 28

    PHP / mySQL-forループが正しく機能しない

  29. 29

    whileループが正しく機能しない

ホットタグ

アーカイブ