3

私はプログラミングがまったく初めてで、ここで何をしているのかを説明する方法がわかりません。

この作品の全体的な目的は、値を入力してから同じ順序で出力することです。「q」を押したときに値を入力するのをやめたいので、文字をスキャンする必要がありますが、それらを int 配列に割り当てると、値は同じではありません。

それがあなたにとって意味があることを願っていますが、いずれにせよ私のコードは次のとおりです。

#include <stdio.h>
#include <stdlib.h>
#define SIZE  5000
define flush fflush(stdin)

main() {
    int input[SIZE] = {0},i = 0;
    int counter = 0;
    char inputs, quit;

     do {
        system("cls");
        printf("Input number ('q' to quit and display numbers entered): ");

        flush;
        scanf("%c",&inputs);
        flush;

        if (inputs == 'q')
            quit = 'q';
        else {
            input[i] = inputs;
            counter++;
            i++;
        }
    } while (i < SIZE && quit != 'q');

    for(i = 0; i < counter; i++){
        printf("%i.%i\n", i + 1, input[i]);
    }

    system("pause");
}

私は自分でこれをやろうとしていて、文字に関する情報をオンラインで調査しましたが、私を助けるものを見つけることができませんでした. よろしくお願いします。

4

3 に答える 3

3

%c を介して整数を取得することも、それが意図されていない場合は整数変数に char 値を割り当てることもできません。むしろ、次のような方法でアプローチする必要があります。

i = 0;
do {
  printf("Enter a number: ");
  scanf("%d", &input[i]);
  i++; counter++;
  printf("Do you want to continue? (y/n) : ");
  scanf("%c", &inputs);
} while(inputs == 'y');

または、前もって整数入力の数を取得し、ループしてその数の整数を取得できます。

于 2012-10-27T22:27:39.183 に答える
0

別の変種。これは、空白の使用に関係なく文字で読み取りgetchar()ますscanf()。これがあなたの望むものかどうかわかりません。整数が必要なようですが、文字を読み取っているようですしたがって、このソリューションは完全にベースから外れている可能性があります。

#include <stdio.h>
#include <stdlib.h>
#define SIZE  5000

int main()
{

    char input[SIZE] = {0};
    int i = 0;
    int counter = 0;
    char inputs;

    printf("Input number ('q' to quit and display numbers entered): ");

    while (((inputs = getchar()) != EOF) && (counter < SIZE))
    {
        if (inputs == 'q')
            break;

        input[counter] = inputs;
        counter++;
    }

    for(i = 0; i < counter; i++)
    {
        printf("%c\n", input[i]);
    }

    system("pause");

    return 0;
}

本当にintが必要な場合は、これでうまくいくはずです。

atoi()この関数を使用して、C 文字列を int に変換できることに注意してください。

このfgets()関数は、STDIN から C 文字列を読み取るために使用されます。ただし、使用scanf("%s", input);した とは対照的に、ここでも機能scanf("%c", &inputs);します。

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

#define INPUT_SIZE 1000
#define SIZE  5000

int main()
{

    char input[INPUT_SIZE] = {0};
    int numbers[SIZE] = {0};
    int i = 0;
    int counter = 0;

    while ((fgets(input, sizeof(input), stdin) != NULL) && (counter < SIZE))
    {
        system("cls");
        printf("Input number ('q' to quit and display numbers entered): ");

        if (input[0] == 'q')
            break;

        numbers[counter] = atoi(input);
        counter++;
    }

    for(i = 0; i < counter; i++)
    {
        printf("%i\n", numbers[i]);
    }

    system("pause");

    return 0;
}
于 2012-10-27T22:47:14.253 に答える
0

代わりに試してください(可能な限り元のコードを使用してください):

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define SIZE  5000

int main()
{
  int input[SIZE] = {0},i = 0;
  int counter = 0;
  char inputs[32];
  bool quite = false;

  do
  {
    system("cls");
    printf("Input number ('q' to quit and display numbers entered): ");

    // read a string from user, then convert when appropr
    fgets(stdin, sizeof(inputs), inputs); 

    if (inputs[0] == 'q')
    {
        quit = true;
    }
    else if ( isdigit(inputs[0]) )
    {
        input[i] = atoi(inputs); // this will disregard any ending \n
        counter++;
        i++;
    }
  }
  while (i < SIZE && !quit);

  for(i = 0; i < counter; i++)
  {
    printf("%i.%i\n", i + 1, input[i]);
  }
  system("pause");
}
于 2012-10-27T22:38:50.113 に答える