*编写一个函数给一个变量赋值,如果赋值失败(值会依然留在缓冲区),丢弃该输入行的
所有剩余内容,并要求重新给这个变量赋值。
代码如下:
int right_num()
{
int number;
while((scanf("%d", &number)) != 1)
{
while (getchar() != '\n')
continue;
printf("Please enter number again");
printf(" not alphy.\n");
}
return number;
}
也可一个把输入的错误的数打印出来告诉用户
代码如下:
int right_num()
{
int number;
while((scanf("%d", &number)) != 1)
{
while ((ch = getchar()) != '\n')
putchar(ch);
printf(" is not right.\n");
printf("Please enter right number");
printf(" not alphy.\n");
}
return number;
}
*读取一行中的第一个字符并丢弃剩余的部分(包括回车也丢掉,主要就是想丢回车)。
代码如下:
char get_first()
{
char ch;
ch = getchar();//接收第一个字符
while ((getchar()) != '\n')
continue;//跳过该行剩下的内容
return ch;
}
读取一行字符串,可读取第一个非空格字符前的空格,不包括末尾的回车
n是包括末尾的空字符在内的最大字符数。
char * s_gets(char * st, int n)
{
int i = 0;
char * fir_address;
fir_address = fgets(st, n, stdin);
while (st[i] != '\n' && st[i] != '\0')
i++;//如果输入的字符数小于n-1,最后一位字符是‘\0’(空字符是自动补充的),倒数第二位是‘\n’,遍历先遇到‘\n’;如果输入的字符数大于等于n-1,最后一位字符数是‘\0’(空字符是自动补充的),倒数第二位是输入的正常字符
if (st[i] == '\n')
st[i] = '\0'//把回车消除掉
else// 此时st[i] == '\0',下面的语句是把多出来的字符消除掉
while (getchar() != '\n')
continue;
return fir_address;
}