在循环中使用scanf动态读取C中的字符
我是C语言的新手,我正在尝试动态读取字符。我想将它们保存到一个数组中,以便以后使用。我现在得到的是这个,我不明白为什么它不起作用。我的问题是,我必须按enter键两次,它将只保存一个字符在循环中使用scanf动态读取C中的字符,c,scanf,C,Scanf,我是C语言的新手,我正在尝试动态读取字符。我想将它们保存到一个数组中,以便以后使用。我现在得到的是这个,我不明白为什么它不起作用。我的问题是,我必须按enter键两次,它将只保存一个字符 char temp; char tempOld; int i = 0; char string[80]; while(scanf("%c", &temp) == 1 && tempOld != '\n') { string[i] = temp; tempOld = te
char temp;
char tempOld;
int i = 0;
char string[80];
while(scanf("%c", &temp) == 1 && tempOld != '\n')
{
string[i] = temp;
tempOld = temp;
i++;
}
string[i] = '\0';
我练习的重点是不要使用string.h
或scanf(“%80s”,string)
谢谢 不要调用scanf来读取键盘输入。此代码建议
while(EOF != (temp = getc(stdin)) && tmpOld != '\n')
另外,将tmpOld初始化为某个值,否则编译器可能很乐意删除整个循环
不管怎样,我发现
scanf()
是一个足够的后遗症,我停止使用它,只使用sscanf()
,我已经验证过字符串的格式是正确的。不要调用scanf来读取键盘输入。此代码建议
while(EOF != (temp = getc(stdin)) && tmpOld != '\n')
另外,将tmpOld初始化为某个值,否则编译器可能很乐意删除整个循环
总之,我发现
scanf()
是我停止使用它的背后的一个足够的痛苦,并且只使用我已经验证过的字符串的格式正确。循环条件while(scanf(“%c”、&temp)==1&&tempOld!='\n')
首先读取一个字符,然后检查前一个字符是否为换行符。此外,值tempOld
未初始化,因此第一次循环迭代时的行为实际上未定义
您需要检查当前读取的字符是否是换行符,如果是,则终止循环。比如:
int temp;
while (i < 79 && (temp = getc(stdin)) != EOF && temp != '\n')
{
string[i++] = temp;
}
string[i] = '\0';
int-temp;
而(i<79&(temp=getc(stdin))!=EOF&&temp!='\n')
{
字符串[i++]=temp;
}
字符串[i]='\0';
您的循环条件while(scanf(“%c”,&temp)==1&&tempOld!='\n')
首先读取一个字符,然后检查前一个字符是否是换行符。此外,值tempOld
未初始化,因此第一次循环迭代时的行为实际上未定义
您需要检查当前读取的字符是否是换行符,如果是,则终止循环。比如:
int temp;
while (i < 79 && (temp = getc(stdin)) != EOF && temp != '\n')
{
string[i++] = temp;
}
string[i] = '\0';
int-temp;
而(i<79&(temp=getc(stdin))!=EOF&&temp!='\n')
{
字符串[i++]=temp;
}
字符串[i]='\0';
“它不工作”不是一个有用的问题描述。是的,我很抱歉。刚刚编辑了我的帖子!因为循环条件while(scanf(“%c”,&temp)==1&&tempOld!='\n')
首先读取一个字符,然后检查前一个字符是否是换行符。你必须在换行后多读一个字符才能终止循环。我明白了。。。我真的不知道我脑子里想的是什么。现在很好用,谢谢!我将发布代码以最终帮助他人。顺便说一句:使用charstring[80]代码>,代码不应使用scanf(“%80s”,字符串)
。也许scanf(“%79s”,string)
或者更好的fgets(string,sizeof string,stdin)
“它不工作”不是一个有用的问题描述。是的,我很抱歉。刚刚编辑了我的帖子!因为循环条件while(scanf(“%c”,&temp)==1&&tempOld!='\n')
首先读取一个字符,然后检查前一个字符是否是换行符。你必须在换行后多读一个字符才能终止循环。我明白了。。。我真的不知道我脑子里想的是什么。现在很好用,谢谢!我将发布代码以最终帮助他人。顺便说一句:使用charstring[80]代码>,代码不应使用scanf(“%80s”,字符串)
。也许scanf(“%79s”,string)
或者更好的fgets(string,sizeof string,stdin)
OP更新了帖子——所以这个答案并没有回答他的问题:我的问题是我必须按enter键twice@MFisherKDX当前位置我认为它仍然适用scanf
会做一些愚蠢的事情,比如从键盘上读东西,把剩下的部分放下来。OP更新了帖子——所以这个答案并没有回答他的问题:我的问题是我必须按enter键twice@MFisherKDX当前位置我认为它仍然适用scanf
做一些愚蠢的事情,比如从键盘上读,把剩下的部分都扔了。