【问题标题】:Replacing spaces in string after input?输入后替换字符串中的空格?
【发布时间】: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


【解决方案1】:

试试

gets() 

而不是 scanf()。 scanf 在遇到空格字符时将停止读取输入。剩余的字符串数据将保留在输入缓冲区中,这可能会导致问题。

【讨论】:

    猜你喜欢
    • 2019-12-22
    • 2013-05-09
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2018-12-01
    相关资源
    最近更新 更多