C编程getchar()

C编程getchar(),c,getchar,C,Getchar,我在编写代码时遇到两个问题。我遇到的第一个问题是,如果用户不输入文本而只按enter键,则让getchar()工作。如果他们这样做,我需要打印一个错误,并提示用户在循环中重新输入文本,直到他们输入文本为止。有没有办法,因为我尝试过的一切都失败了。 以下是我对该部分的代码: printf("Enter a text message: "); while((c=getchar()) != '\n' && c != EOF) { text[i]= c;

我在编写代码时遇到两个问题。我遇到的第一个问题是,如果用户不输入文本而只按enter键,则让getchar()工作。如果他们这样做,我需要打印一个错误,并提示用户在循环中重新输入文本,直到他们输入文本为止。有没有办法,因为我尝试过的一切都失败了。 以下是我对该部分的代码:

printf("Enter a text message: ");
while((c=getchar()) != '\n' && c != EOF)
{
        text[i]= c;
        i++;
}
我是C语言的新手,所以我的想法有限,无法解决我的困境。如您所见,我将输入设置为数组。这导致了我的第二个问题,我需要限制输入不超过100个字符。但是,我不需要给用户一个错误,只需要切掉多余的字符,然后读取前100个字符。

\include
#include <stdio.h>

#define MAXSIZE 100

int main() {
  char text[MAXSIZE+1]; // one extra for terminating null character
  int i = 0;
  int c;

  while (1) {
    printf("Enter a text message: ");

    i = 0;
    while ((c = getchar()) != '\n' && c != '\r' && c != EOF) {
      if (i < MAXSIZE) {
        text[i]= c;
        i++;
      }
    }
    if (i > 0 || c == EOF)
      break;
    printf("Empty string not allowed.\n");
  }

  text[i] = '\0';

  printf("You entered: %s\n", text);

  return 0;
}
#定义最大尺寸100 int main(){ 字符文本[MAXSIZE+1];//额外一个用于终止空字符 int i=0; INTC; 而(1){ printf(“输入文本消息:”); i=0; 而((c=getchar())!='\n'和&c!='\r'和&c!=EOF){ 如果(i0 | | c==EOF) 打破 printf(“不允许使用空字符串。\n”); } 文本[i]='\0'; printf(“您输入了:%s\n”,文本); 返回0; }
检测不合规系统的测试代码:

#include <stdio.h>

int main() {
  int c;
  printf("Just hit enter: ");
  c = getchar();
  if (c == '\r')
    printf("\\r detected!!!\n");
  else if (c == '\n')
    printf("\\n detected.\n");
  else
    printf("Yikes!!!\n");
  return 0;
}
#包括
int main(){
INTC;
printf(“只需点击回车:”;
c=getchar();
如果(c=='\r')
printf(“\\r检测到!!!\n”);
else如果(c=='\n')
printf(“\\n检测到。\n”);
其他的
printf(“Yikes!!!\n”);
返回0;
}
首先,getchar()只能接受一个字符作为输入。它不能包含多个字符

char c;
int total_characters_entered = 0;
do
{
    printf ("Enter a text message: ");
    c = getchar();

    if (c != '\n')
    {
        total_characters_entered++;
    }

} while (total_characters_entered <= 100);
charc;
输入的字符总数=0;
做
{
printf(“输入文本消息:”);
c=getchar();
如果(c!='\n')
{
输入的字符总数++;
}

}虽然(输入的字符总数解决问题的最简单方法是使用
fgets
。我们可以对输入进行限制,以便它不会在给定限制后读取额外字符

参考此示例代码。如果用户未按
Enter
键,我将在此处打印字符串:

#include <stdio.h>

int main() 
{
    char str[100];
    fgets(str, 100, stdin);
    if(str[0] != '\n')
    {
        puts(str);
    }
    return 0;
}
#包括
int main()
{
char-str[100];
fgets(str,100,stdin);
如果(str[0]!='\n')
{
put(str);
}
返回0;
}

我已经试过了,但由于某种原因,我使用的编译器不允许使用fgets。因此,我的导师告诉我使用getchar()。如果我可以使用它,那就容易多了。你添加了
stdio.h
头文件了吗?你使用的是哪个平台和编译器?我使用了#include。编译器说get和fgets是危险的,不应该使用。我确保尝试这两种方法,并且我的代码看起来与你的完全相同。不惜一切代价避免
get()
fgets()
不危险,使用起来也没问题。
fgets
不会“移除”额外的字符。它根本不读取它们。但是它们仍然在输入缓冲区中。为了存储所有的输入,我正在使用数组。它被很好地存储并打印所有内容。由于某种原因,我无法让它识别没有输入的情况,输入是唯一输入的内容。谢谢你的输入。我将尝试类似的方法,看看是否有结果是这样的。由于某种原因,我无法让it识别出没有输入。@ooga OP可能在(IMO不兼容)环境中,并接收到
“\r\n”
愚弄空字符串检测。@chux有趣的想法。我将为OP发布一些代码来测试它。@user3822731尝试上面的测试代码(第二块代码)然后让我知道结果是什么。另外,请再次尝试其他代码。我添加了一个对
'\r'
的测试。我认为
|c==EOF
是不必要的。如果
I==0&&c==EOF
:必须考虑没有输入。注意:使用
c=fgetc()
,确保
int c
和not
char c
。这有助于使用
is…()
函数,并区分
EOF
和可能获得的256个不同字符。注意:在2条注释中,您要求“识别没有输入”。这对于程序来说很难感觉到“没有输入”。“没有输入”对我来说,这意味着不输入任何东西。与其认为“没有输入”,不如认为它只是按了一下键。现在代码有了一些输入,可以相应地执行操作。