我正在编写一个程序来扫描一个人的姓名,性别和三个月检查。以下是我想要输入的示例:
Jack m 200 250 300
如果用户键入“足够”并按Enter键而不填写其他详细信息,我希望循环结束。我尝试使用两个scanf,一个用于单独的字符串,另一个用于其他扫描,但它没有正确循环。这是我的代码:
int main()
{
int i;
char names[SIZE][NAME_LEN] = {0}, gender[SIZE] = {0};
int sales[SIZE][SALES_LEN] = {0};
printf("Enter the name, gender and three month sales for name %d: ", i+1);
for (i=0; i<SIZE; i++){
if (strcmp(names[i], "Enough") == 0 || strcmp(names[i], "enough") == 0)
break;
scanf("%s %c %d %d %d",names[i], &gender[i], &sales[i][0],&sales[i][1],&sales[i][2]);
}
return 0;
}
答案 0 :(得分:0)
您可以使用以下内容:
while(gets(line)) { ... }
如果用户只按下返回键,则gets函数返回NULL并且循环停止。这样用户就不必输入“足够”。
*不要使用gets()函数,因为它不安全(缓冲区溢出的风险)。 我通常将它包装在一个控制输入长度的函数中。
答案 1 :(得分:0)
您的代码被破坏了许多地方:错误排序的语句和错误的读取和解析类型。这可以解决问题:
for (i=0; i<SIZE; i++) {
char buffer[100]; // A full line
printf("Enter the name, gender and three month sales for name %d: ", i+1);
if (fgets(buffer,sizeof buffer,stdin)==NULL // if nothing can be read
|| strncasecmp(buffer,"-stop",5)) { // or if user typed "-stop" and whatever, an impossible lastname?
break;
}
// try to convert the line into fields of given types...
if (sscanf(buffer,"%s %c %d %d %d",names[i], &gender[i], &sales[i][0],&sales[i][1],&sales[i][2])!=5) {
// do something if conversions failed
}
}