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

尝试代替(尽可能使用您的原始代码):

#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 回答
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;
}
于 2012-10-27T22:47:14.253 回答