【发布时间】:2015-07-06 05:58:38
【问题描述】:
在下面的代码中,当用户在地址处输入空格时,程序会陷入死循环?
示例:street,town,city 会使程序崩溃,如何用“,”替换空格?或者至少阻止这种情况发生
printf("\nEnter address:\n");
scanf("%s", newNode->address);
printf("\nEnter department:\n");
scanf("%d", &newNode->depart);
while(validDate == 0){
printf("\nEnter Data Of Join(dd/mm/yy):\n");
if (scanf("%d%*[-/. ]%d%*[-/. ]%d", &newNode->day, &newNode->mounth, &newNode->year) != 3){
printf("Wrong format! Please enter a date and exclude the slashes! eg. 15 01 95");
}
else{
// break the loop
validDate = 1;
}
}// date validation end
【问题讨论】:
-
关于 scanf() 的调用: 1) "%s" 应该有长度修饰符,所以输入缓冲区不会溢出。 2) 应检查返回值(不是参数)以确保操作成功 3) 这:“%d%*[-/.]%d%*[-/.]%d”应该是:“% d/%d/%d" 这将输入三个日期变量,就像请求的提示一样
-
您应该将日期读取为字符串(完整行),然后从该字符串中解析日期。
-
用
char buf[100]; fgets(buf, sizeof buf, stdin); if(sscanf(buf, ...替换所有scanf(...) -
scanf() 在空白处停止 (' ' \t \n),这就是代码停留在循环中的原因。只需按照提示使用数据,它就会正常工作
标签: c loops linked-list scanf