【问题标题】:My program is asking too many times for input. C while loop我的程序要求输入太多次。 C while 循环
【发布时间】:2014-03-20 08:45:45
【问题描述】:

在第一次输入之后,我的程序要求输入的次数过多。源代码:

#include <stdio.h>
#include <stdlib.h>
typedef struct data{
    char name[100];
    int n_in_class;
    int grade;
    struct data *p;
}data;

void add(data *begin);

int main(void){
    char n;
    data *begin = malloc(sizeof(data));

    while(1 == 1){
        printf("Do you want to add new student(n) or (y)");
            n = getchar();
        if(n == 'n'){
            break;
        }
        else if(n == 'y'){
            add(begin);
        }
    }
    data *temp = begin;
    while(temp != NULL){
        printf("%s", temp->name);
        temp = temp->p;
    }
}

void add(data *begin){
    data *new = malloc(sizeof(data));
    printf("enter name: ");
        scanf("%s", &new->name);
    printf("Enter number in class: ");
        scanf("%i", &new->n_in_class);
    printf("enter grade: ");
        scanf("%i", &new->grade);
    data *temp = begin;
    while(1==1){
        if(temp->p == NULL){
            temp->p = new;
            break;
        }
        else{
            temp = temp->p;
        }
    }
}

程序启动,我输入 y 并调用 add 函数,我输入所有信息没有问题,在我完成输入信息后,当再次要求输入时,它打印消息“你想添加新学生(n)或(y)”两次。我尝试使用不同的函数来获取输入 scanf、fgets、getline 和 getchar。

【问题讨论】:

  • 提高你的编码习惯使用while(1)而不是while(1 == 1)
  • 我看不出 1==1 有什么不好,我看不出有什么理由称其为“坏习惯”;
  • 您应该始终编写清晰、简单和简短的代码。你只想运行一个无限循环,那么为什么1==1 只有1 可以做同样的事情。

标签: c input while-loop


【解决方案1】:

当你输入 yn 并按 ENTER 时,换行符也在输入缓冲区中,你需要删除这个下一个循环之前的换行符。

if(n == 'n'){
    break;
}
else if(n == 'y'){
    add(begin);
}
getchar();   //consumes new line

【讨论】:

    【解决方案2】:

    要使用输入缓冲区中的换行符, 你也可以使用 scanf(" %c", &amp;n) ; - 格式描述符前的空格(%c)

    代替第一个getchar()

    或 你也可以使用

    getc(stdin)' 代替第二个getchar() 来实现相同的效果。

    【讨论】:

      猜你喜欢
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 2013-09-06
      • 1970-01-01
      • 2023-01-24
      • 2014-04-01
      • 1970-01-01
      相关资源
      最近更新 更多