C语言将有效字符串存入二维数组后打印出现空行的解决办法
问题根源
- 代码中使用遍历所有输入的全局下标
i作为validStr的存储索引,遇到无效输入时,对应下标的validStr元素不会被赋值,保持初始空字符串状态。 - 后续打印时直接输出
validStr[0]到validStr[count-1],中间未被赋值的空字符串就会被打印为空行。
修复方法
仅需修改有效字符串的存储索引,用count代替i即可,count仅在存入有效字符串时递增,能保证所有有效字符串连续存放在validStr的前count个位置,无空值间隔,符合你要求的「所有输出在第一个for循环结束后执行」的逻辑,不需要调整其他流程。
修复后完整代码:
int main() { int i, count = 0; char input[10]; char validStr[10][60] = {""}; for (i = 0; i < 60; ++i){ if(fgets(input,10, stdin) == NULL){ break; } input[strcspn(input,"\n")] = '\0'; if(checkIfValid(input)){ // 把索引从i改为count即可 memcpy(validStr[count],input,sizeof(input)); count++; } } printf("%d\n",count); for (int j = 0 ; j < count; ++j){ printf("%s\n",validStr[j]); } }
内容的提问来源于stack exchange,提问作者RandomDeveloper
相关产品推荐
相关产品推荐

