繁体   English   中英

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

[英]Assigning a user-entered char to a variable

我遇到一些问题,无法成功将用户输入的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;

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

  1. putchar(input)没有做任何有用的事情。 putchar不会将值写入变量(您尝试分配以confirm ),而是将其写入程序的标准输出(完全不是同一件事)。 我认为您根本不想使用putchar
  2. 如果confirm是一个char ,则要与'Y' (一个字符)而不是"Y" (一个字符串)进行比较。 查看confirm如何声明可能会有所帮助。

这是您要尝试执行的简化示例。 除非您正在从文件中读取输入(除了cntrl + c或退出按钮,如果您正在使用控制台应用程序),否则eof字符为'\\ 0',因此无法停止此循环。 必须将字符与单引号中的字母进行比较。 另外,如先前的海报所述,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;
}
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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM