我似乎找不到问题所在。
在第一个循环中,我可以输入债权人的名字,但是在第二个循环中,我不能输入债权人的名字。
int main(){
float cb,ir,si,sum=0,totaldebt;
int time,i;
char name[25];
printf("------------Welcome to Debt Management System-------------");
for (i=1;i>=1;i++){
printf("\n%d)Name of the creditor: ",i);
scanf("%[^\n]",&name);
printf("Enter your current balance: ");
scanf("%f",&cb);
printf("Enter its interest rate: ");
scanf("%f",&ir);
printf("Enter time for the loan: ");
scanf("%d",&time);
si=cb*ir*time/100;//simple interest
totaldebt=si+cb; //simple interest + current balance
if (name=='none'){
break;
}
sum+=totaldebt;
}
它跳过了scanf
部分,我有点猜测该阅读部分似乎被先前的阅读所卡住了。
答案 0 :(得分:3)
要获得想要的效果,%[^\n]*c
应该为%[^\n]%*c
。您需要第一个模式的说明符,然后是单个字符的说明符。现在编写的方式是,要求scanf
将所有内容匹配到换行符,然后读取序列*c
。
它无法读取该序列,但与第一个说明符匹配。因此,您最终得到的未使用换行符可能会使您的其他输入失效。
您的for (i=1;i>=1;i++)
还存在潜在的问题,即该病很严重,并且可能会持续一段时间。
现在,尽管这可能都是一个有趣的练习,但我建议您抛开scanf
并切换到fgets
以读取输入行。它不那么隐秘,它迫使您传递缓冲区大小,与scanf
相比,使用它要更容易,更安全。
答案 1 :(得分:3)
要完成第一个答案,我注意到了这个问题:
if (name=='none')
{
break;
}
此格式在C语言中不正确,您应该:
strcmp
功能"
而不是'
来定义字符串:
/* if two strings are the same --but not necessary at the same adress-- strcmp return 0*/
if (0 == strcmp(name, "none"))
{
break;
}
答案 2 :(得分:0)
在输入字符串时,不需要使用引用运算符'&'。这就是为什么在您的第一个scanf语句中使用name而不是&name的原因。如果要在输入中使用换行符,请使用%* c修改输入语句,如下所示。其他错误已在上述答案中指出。 scanf(“%[^ \ n]”,name);要么 scanf(“%[^ \ n]%* c”,name);