我试图读取输入字符,直到它是'a'.然而我需要所有输入的字符直到a.问题是它也把新行作为一个字符,也就是说当我按一个字符(比如f)和回车时,它在下一个循环中把f和新行的字符一起带走。
#include<stdio.h>
int main()
{
char val;
while(1)
{
printf("\nenter val: (a to stop)");
scanf("%c",&val);
printf("val is %d\n",(int)val);
if(val=='a')
break;
else
continue;
}
return 0;
}
輸出。
enter val: (a to stop)f
val is 102
enter val: (a to stop)val is 10
enter val: (a to stop)
这是另一种实现你想要的相同逻辑的方法.你可以在格式指定符前添加一个空格,当你使用 scanf()
scanf(" %c",&val);
前导空格告诉 scanf()
来跳过任何空白字符(包括换行),然后再读取下一个字符。
正如许多人建议的那样,您可以使用 fgets
或 fgetc
.
Newline是一个字符,它的值是10。如果你不想要它,请在打印前检查它是否为换行符。
include<stdio.h>
int main()
{
char val;
while(1)
{
printf("\nenter val: (a to stop)");
scanf("%c%*c",&val);
printf("val is %d\n",(int)val);
if(val=='a')
break;
else
continue;
}
return 0;
}
你也可以使用 gets()
如果你想跳过换行符,如下图所示。
#include<stdio.h>
int main()
{
char val;
while(1)
{
printf("\nenter val: (a to stop)");
gets(&val);
printf("val is %d\n",(int)val);
if(val=='a')
break;
else
continue;
}
return 0;
}