将用户输入的char分配给变量

时间:2015-03-29 04:09:30

标签: c arrays

我有一些问题成功地将用户输入char输入到变量,然后该变量需要在程序的不同部分使用。

有问题的程序应该做以下事情:

  • 获取一组用户输入的值
  • 将这些值放入预定大小的数组
  • 提示用户是否要查看数组
  • 如果' Y',则打印数组。

我将以代码片段的形式向您展示程序的第二部分,因为第一部分(将值放入数组)工作正常:

char input, confirm;
printf("Would you like to view the array? Y/N: ");
    while ((input = getchar()) != EOF){
        confirm = putchar(input);
    if (confirm == 'Y'){
        printf("[");
        for (i = 0; i < maxvals; i++){
            if (i != maxvals - 1){
                printf("%d,", A[i]);
            }
            else{
                printf("%d", A[i]);
            }
        }
        printf("]");
    }
    printf("\n");

所有变量显然都是预先声明的。第2行和第3行是我现在遇到问题的地方。

当我尝试运行程序时,我得到:

$ arrays.exe
Enter as many as 10 values, ^D to end
1 2 3
^D
3 values read into array
Would you like to view the array? Y/N: ♦
Y
Y

注意程序只重复用户输入的内容。我也尝试了这个(代替while循环):

confirm = getchar();

但这只是终止程序。我还担心我的if (confirm == "Y")行无法正常工作,但根据我之前的编程经验,我认为应该这样做吗?

我很确定我已经提供了所有必要的代码但是如果你想要整个程序,请告诉我这样我就可以编辑它。

编辑:

没有人提到scanf。它解决了这个问题。以下是工作代码供将来参考:

while (scanf("%c", &confirm) == 1){
    if (confirm == 'Y'){
    printf("[");
    for (i = 0; i < n; i++){
        if (i != n - 1){
            printf("%d,", A[i]);
         }
         else{
            printf("%d", A[i]);
         }
    }
    printf("]");
    break;
    }
}
return 0;

3 个答案:

答案 0 :(得分:1)

你说它没有用,但是你不能说出不工作的症状是什么。这可能有所帮助。无论如何,我认为有两件事可能是问题:

  1. putchar(input)没有做任何有用的事情。 putchar不会将值写入变量(您尝试分配给confirm),它会写入程序的标准输出(并非完全相同)。我根本不认为你想使用putchar
  2. 如果confirmchar,您希望与'Y'进行比较,"Y"是一个字符,而不是confirm,这是一个字符串。查看{{1}}的声明方式可能会有所帮助。

答案 1 :(得分:0)

这是您尝试做的简化示例。没有办法停止这个循环,因为eof字符是&#39; \ 0&#39;除非您正在读取文件中的输入(除了cntrl + c或退出按钮,如果您正在使用控制台应用程序)。必须将字符与单引号中的字母进行比较。另外,正如前面提到的海报所说,putchar没有按照你的预期行事。 以下是该功能的文档:http://www.cplusplus.com/reference/cstdio/putchar/

int main()
{
    char input, confirm;
    printf("Would you like to view the array? Y/N: ");
    while ((input = getchar()) != EOF){
        if (input == 'Y'){
            printf("!");
        }
    }

    return 0;
}

答案 2 :(得分:-1)

here is your code, cleaned up some
and not using a 'input' variable
and not using a call to putchar()
and 'confirm' properly declared as an int


// this assumes that A[] and maxvals and i are already defined and set

int confirm;
printf("Would you like to view the array? Y/N: ");

while ((confirm = getchar() && !( 'Y' == confirm || 'N' == confirm ) && EOF != confirm  )
{
    if( EOF == confirm ) exit(1);
    else printf( "invalid input: please enter: 'Y' or 'N'");
} // end while

// when get here, confirm contains 'Y' or 'N'
if ( 'Y' == confirm )
{
    printf("[");
    for (i = 0; i < maxvals; i++)
    {
        if (i != maxvals - 1)
        {
            printf("%d,", A[i]);
        }
        else
        {
            printf("%d", A[i]);
        } // end if
    } // end for
    printf("]");
} // end if
printf("\n");