【问题标题】:I have three input to enter but it is only allowing me to enter two first one and break on the third我要输入三个输入,但它只允许我输入两个第一个并在第三个中断
【发布时间】:2026-01-04 02:30:01
【问题描述】:

这个程序确定房间的面积,它是长度和宽度的乘积。房间是“太小”、“刚刚好”还是“太大”。如果房间“太小”或“太大”,可用空间与所需空间的差值,应为正数。

#include<stdio.h>

void main() {
    // Declare variables and set initial values
    int length, width, n, area, square;
    
    // Print new values
    printf("\nEnter room length:");
    scanf("%d", length);
    printf("\nEnter room width:");
    scanf("%d", width);
    printf("\nEnter number of students:");
    scanf("%d", n);
 
    // assigning area
    area = length * width;
     
    printf("\nArea is %d\n", area); 
    square = area - n * 10; 
    if (area > n*10) {
        printf("Room is too large by %d square feet", square);
    }
    else if (area < n*10) {
        printf("Room is too small by %d square feet", square);
    }
    else {
        printf("Room size is just right");
    }
}

【问题讨论】:

  • scanf("%d", length); ---> scanf("%d", &amp;length);, scanf("%d", width); ---> scanf("%d", &amp;width);scanf("%d", n); ---> scanf("%d", &amp;n);。另外,main() 的返回类型应该是int
  • 为了详细说明之前的评论,scanf 期待看到一个指针。 &amp;n 的意思是“获取指向存储 n 的地址的指针。”
  • 如果您了解scanfs 的工作原理,之后的一切都会变得简单。这是你见过的最复杂的函数。
  • 感谢 H.S!我刚改了,还是不能输入学生号。
  • 除非您检查返回,否则您无法正确使用任何输入功能(这尤其适用于scanf() 和家人.. .)

标签: c scanf


【解决方案1】:
#include<stdio.h>

int main() {
    // Declare variables and set initial values
    int length, width, n, area, square;
    
    // Print new values
    printf("\nEnter room length:");
    scanf("%d", &length);
    printf("\nEnter room width:");
    scanf("%d", &width);
    printf("\nEnter number of students:");
    scanf("%d", &n);
 
    // assigning area
    area = length * width;
     
    printf("\nArea is %d\n", area); 
    square = area - n * 10; 
    if (area > n*10) {
        printf("Room is too large by %d square feet", square);
    }
    else if (area < n*10) {
        printf("Room is too small by %d square feet", square);
    }
    else {
        printf("Room size is just right");
    }
    
    return 0;
}`

&amp; 运算符需要在 scanf 中的变量之前将值存储在该变量中

例如scanf(%d,&amp;b)

【讨论】:

  • 最后的getchar 毫无用处。如果您试图让程序保持“活动”状态,以便 IDE 或图形 shell 不会关闭终端窗口,那将无济于事。在最后一个scanf 之后,输入缓冲区中至少还有一个换行符,所以getchar 会立即返回。
【解决方案2】:

在格式说明符%d 之后和变量之前使用&amp; 作为&amp; 运算符用于获取变量的地址或接受用户输入,在任何使用scanf 的地方,除了字符数组或字符串.使用gets(variable_name) 函数将字符数组或字符串作为用户的输入。例如,如果我接受你的程序,它应该是:

 printf("\nEnter room length:");
scanf("%d",&length);
printf("\nEnter room width:");
scanf("%d",&width);
printf("\nEnter number of students:");
scanf("%d",&n);

printf("\n enter name : "); //datatype of Name must be String
gets(name);

【讨论】:

  • 在这里作为“要记住的规则”呈现,这并不能提供有用的学习。请解释&amp;的含义。还考虑在输入例如的情况下讨论它的缺席。一个词到char的数组中。