C 获取用户';从输入中选择

C 获取用户';从输入中选择,c,input,C,Input,我的任务是使用两种方法从用户那里获取输入 我想给用户chioce。如果他想要方法1,按1。否则,按0 之后,用户开始键入我必须打印的字符串。我打印输入,直到用户按下enter按钮或EOF 问题是,当用户给我“选择”时,他按enter按钮('\n'),因此我的程序存在 我怎样才能解决这个问题 printf("please enter your chioce: for malloc press 1. for linked list press 0\n"); scanf("%d",&n

我的任务是使用两种方法从用户那里获取输入

我想给用户chioce。如果他想要方法1,按1。否则,按0

之后,用户开始键入我必须打印的字符串。我打印输入,直到用户按下enter按钮或EOF

问题是,当用户给我“选择”时,他按enter按钮('\n'),因此我的程序存在

我怎样才能解决这个问题

printf("please enter your chioce: for malloc press 1. for linked list press 0\n");
    scanf("%d",&n);

    if (n)
    printWithMalloc();

    else{
.....
为了清楚起见,我的if用于输入:

printf("please enter a string. the string will be printed right away.\n");
    while ((c=getchar())!=EOF && c!='\n')

忘记
scanf()


如果我正确理解您的问题,您希望在用户输入一个空行时退出。如果是,只需读取整行,并检查它是否为空(除了尾随的换行符):


不要使用
printf(…)
进行无格式文本输出,这可能是一个坏习惯,可能会导致您尝试一些非常危险的事情。如果您使用
printf(user\u input)
打印用户输入,并且用户的输入中包含用户
%s
%n
,则他们可能会使您的程序崩溃或更糟地执行调用堆栈攻击。养成使用
put(…)
进行单行无格式文本输出的习惯,并且只在您实际需要格式化输出时使用
printf(…)
。您是否考虑过扫描手册页?@AndonM.Coleman我不同意您的意见
printf
完全可以,尽管您熟悉安全概念,但是这可以通过
printf(“%s\n”,用户输入)轻松解决还有其他选择吗?我有点害怕用链表和工作人员来尝试@H2CO3@Alan什么是“另一种选择”?有无数的选择。这和链表有什么关系?在这段代码中我没有使用任何链表。我不想在这里输入很多代码,但我希望它尽可能简单。用户输入一个输入,并将其放在最后的链表中。@Alan aaaa这段代码有什么问题^^^?为什么它会阻止您以将节点附加到链接列表或在其前面添加节点的方式对其进行扩展?
while (1) {
    char buf[LINE_MAX];
    if (!fgets(buf, sizeof buf, stdin))
        break; // EOF

    if (buf[0] == '\n')
        break; // empty line

    // if we got here, the user entered something; try converting it to an int
    int choice = strtol(buf, NULL, 0);
    // and do stuff with it
}