#include<stdio.h>
int main(){
int N,M;
scanf("%d %d\n",&N,&M);
float P[N];
for(int i=0;i<N;i++){
scanf("%f\n",&P[i]);
}
for(int i=0;i<N;i++){
if(P[i]<M){
printf("On sale! %.1f\n",P[i]);
}
}
}
我的代码出现问题,本题希望可以得到大家的指导,谢谢你的帮助!
修改如下,改动处见注释,供参考:
#include<stdio.h>
#define N 101 // 修改
int main() {
int n, M;
scanf("%d %d", &n, &M); //scanf("%d %d\n", &N, &M); 修改
double P[N]; //float P[N]; 修改
for (int i = 0; i < n; i++) { //for (int i = 0; i < N; i++) 修改
scanf("%lf", &P[i]); //scanf("%f\n", &P[i]); 修改
}
for (int i = 0; i < n; i++) { //for (int i = 0; i < N; i++) 修改
if (P[i] < M) {
printf(i ? "\nOn sale! %.1f" : "On sale! %.1f", P[i]); // 修改
}
}
}
删除scanf里的\n
【以下回答由 GPT 生成】
在您提供的代码中,并没有明确说明输入的N和M的数值范围。所以在解决问题之前需要先确认输入的合法性。
除此之外,代码中有一些小问题需要修正,下面是修正后的代码:
#include <stdio.h>
int main() {
int N, M;
scanf("%d %d", &N, &M); // 去掉末尾的换行符
if (N <= 0 || M <= 0) {
printf("输入的N和M必须大于0\n");
return 0;
}
float P[N];
for (int i = 0; i < N; i++) {
scanf("%f", &P[i]); // 去掉末尾的换行符
}
for (int i = 0; i < N; i++) {
if (P[i] < M) {
printf("On sale! %.1f\n", P[i]);
}
}
return 0;
}
修正的地方包括: 1. 去掉输入的末尾换行符以避免产生错误; 2. 添加输入的合法性检查,确保输入的N和M大于0; 3. 在输出小于M的商品价格时,使用保留一位小数的形式进行输出; 4. 添加主函数的返回值。
希望这些修正可以解决您的问题!如果还有其他问题,请随时提问!
【相关推荐】