C编程getchar()
我在编写代码时遇到两个问题。我遇到的第一个问题是,如果用户不输入文本而只按enter键,则让getchar()工作。如果他们这样做,我需要打印一个错误,并提示用户在循环中重新输入文本,直到他们输入文本为止。有没有办法,因为我尝试过的一切都失败了。 以下是我对该部分的代码:C编程getchar(),c,getchar,C,Getchar,我在编写代码时遇到两个问题。我遇到的第一个问题是,如果用户不输入文本而只按enter键,则让getchar()工作。如果他们这样做,我需要打印一个错误,并提示用户在循环中重新输入文本,直到他们输入文本为止。有没有办法,因为我尝试过的一切都失败了。 以下是我对该部分的代码: printf("Enter a text message: "); while((c=getchar()) != '\n' && c != EOF) { text[i]= c;
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
和notchar c
。这有助于使用is…()
函数,并区分EOF
和可能获得的256个不同字符。注意:在2条注释中,您要求“识别没有输入”。这对于程序来说很难感觉到“没有输入”。“没有输入”对我来说,这意味着不输入任何东西。与其认为“没有输入”,不如认为它只是按了一下键。现在代码有了一些输入,可以相应地执行操作。