int数组不会获取char值

时间:2012-10-27 22:19:36

标签: c

我在编程方面绝对是全新的,我不知道如何解释我在这里做什么。

这件作品的全部目的是输入数值,然后以相同的顺序打印出来。现在我想在按'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");
}

我一直试图用自己的btw来做这件事,并且还在网上研究了一些有关字符的信息,但找不到任何可以帮助我的信息。非常感谢。

3 个答案:

答案 0 :(得分: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');

或者你可以预先获得整数输入的数量并循环以获得那么多的整数。

答案 1 :(得分: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");
}

答案 2 :(得分: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;
}

如果你确实想要整体,那么这个应该有用。

请注意,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;
}