在C中从用户处获取连续输入

在C中从用户处获取连续输入,c,input,terminal,user-input,C,Input,Terminal,User Input,我正在做一个项目,在这个项目中,我必须从终端c中的用户那里获取输入,直到他们输入退出,然后我结束程序。我意识到我不能这样做: #include<stdio.h> #include<stdlib.h> int main(int argc, char **argv){ char *i; while(1){ scanf("%s", i); /*do my program here*/ myMethod(

我正在做一个项目,在这个项目中,我必须从终端c中的用户那里获取输入,直到他们输入退出,然后我结束程序。我意识到我不能这样做:

#include<stdio.h>
#include<stdlib.h>    

int main(int argc, char **argv){
    char *i;
    while(1){
        scanf("%s", i);

        /*do my program here*/
        myMethod(i);

    }

}
#包括
#包括
int main(int argc,字符**argv){
char*i;
而(1){
scanf(“%s”,i);
/*在这里执行我的程序*/
我的方法(一);
}
}

所以我的问题是,我怎样才能开始接受这个复杂的用户输入呢?我可以用循环来完成吗?或者我还能做什么?

您可以使用do while循环:

do
{
    // prompts the user 
}
while (valueGiven != "quit");

首先,您必须为正在读取的字符串分配空间,这通常是通过宏大小的
char
数组来完成的
chari[BUFFER\u SIZE]
然后将数据读入缓冲区,可能比这更好。最后,您检查退出案例,使用
“退出”

#包括
#包括
#定义缓冲区大小BUFSIZ/*或其他数字*/
int main(int argc,常量字符**argv){
字符i[缓冲区大小];
fgets(i、BUFSIZ、stdin);
while(strcmp(i,“退出”!=0){
我的方法(一);
fgets(i、BUFSIZ、stdin);
}
}
获取的字符串以null结尾

scanf()将返回成功读取的元素数,我将使用它,如下所示

#include<stdio.h>
#include<string.h>
int main()
{
   int a[20];
   int i=0;
   printf("Keep entering numbers and when you are done press some character\n");
   while((scanf("%d",&a[i])) == 1)
   {   
      printf("%d\n",a[i]);
      i++;
   }   

   printf("User has ended giving inputs\n");
   return 0;
}
#包括
#包括
int main()
{
INTA[20];
int i=0;
printf(“继续输入数字,完成后按一些字符\n”);
而((scanf(“%d”,&a[i])==1)
{   
printf(“%d\n”,a[i]);
i++;
}   
printf(“用户已结束输入\n”);
返回0;
}

=
不能在数组上使用(这
“quit”
是)是的,我用strcmp尝试了这个,但是在扫描后我得到了一个segfault。当你试图将输入填充到无内存中时会发生这种情况。为什么要投反对票?因为写了一个会导致立即出现分段错误的答案,至少如果它不包含语法错误的话?代码现在是正确的吗?保罗,希望如此?不,你实际上让它变得更糟了。好吧,太棒了,这只是一个问题,但当我键入quit时,它不会退出程序。知道为什么吗?因为fgets()
还写入换行符。实际上,它刚刚得到它,但它没有意识到fgets在输入字符串的末尾添加了一个\n,所以只需将\n添加到strcmp行的末尾,它就可以完美地工作了!
#include <stdio.h>
#include <string.h>

#define BUFFER_SIZE BUFSIZ /* or some other number */

int main(int argc, const char **argv) {
    char i[BUFFER_SIZE];
    fgets(i, BUFSIZ, stdin);
    while (strcmp(i, "quit\n") != 0) {
        myMethod(i);
        fgets(i, BUFSIZ, stdin);
    }
}
#include<stdio.h>
#include<string.h>
int main()
{
   int a[20];
   int i=0;
   printf("Keep entering numbers and when you are done press some character\n");
   while((scanf("%d",&a[i])) == 1)
   {   
      printf("%d\n",a[i]);
      i++;
   }   

   printf("User has ended giving inputs\n");
   return 0;
}