c - WSL(ubuntu) printf 只输出相同的文本
问题描述
我有个问题。我的代码:
#include <stdio.h>
int readInteger() {
int x,y;
printf("variable 1 :");
scanf("%d", &x);
return x;
printf("variable 2 :");
scanf("%d", &y);
return y;
}
int compare (int, int);
int main() {
int x = readInteger(x);
int y = readInteger(y);
printf("%d is greater", compare(x,y));
return 0;
}
int compare(int x , int y) {
if(x > y) return x;
else return y;
}
仅输出
variable 1: ...
variable 1: ...
代替
variable 1: ...
variable 2: ...
解决方案
问题是因为return
意味着“在这里结束函数执行”。所以你有了
int readInteger() {
int x,y;
printf("variable 1 :");
scanf("%d", &x);
return x;
printf("variable 2 :");
scanf("%d", &y);
return y;
}
由于这return x
条线,这相当于
int readInteger() {
int x,y;
printf("variable 1 :");
scanf("%d", &x);
return x;
}
一种快速解决方法是删除return x;
线。尽管那样它不会完全按照您希望函数执行的操作,因为您想读取 2 个整数并返回它们。
更好的解决方法是将字符串作为参数传递给函数,然后调用它两次:
int readInteger(const char* prompt) {
int x;
printf(prompt);
scanf("%d", &x);
return x;
}
int main() {
int x = readInteger("variable 1 :");
int y = readInteger("variable 2 :");
printf("%d is greater", compare(x,y));
return 0;
}
PS。如果函数没有参数(readInteger
在您的原始代码中,则不应使用参数(int x = readInteger(x)
in main
)调用它。
推荐阅读
- c# - 预启动控制台配置
- html - 基于 Cookie 显示/隐藏图像和 Youtube 视频
- dynamics-crm - 创建新设置实体的新记录
- python - 您可以在不使用 dict 或其他结构的情况下将单个变量设置为 for 循环中的另一个变量吗?
- python - 检查保存方法中的唯一约束
- godot - Godot - 当玩家通过一个区域时触发
- java - 动画不会结束 - Android
- java - RSQL-Parser 和布尔查询值因 IllegalArgumentException 而失败
- python - Tkinter 小部件刷新移动到错误的帧
- mysql - MySQL创建触发器以从另一列获取值