[英]C program in ubuntu using visual studio code
我写的代码:
#include<stdio.h>
int main()
{
int i,m,maths=0,english=0,e,science=0,s,all=0;
for(i=1;i<=5;i++)
{
printf("enter the marks of english:\n");
scanf("%d",&e);
printf("enter the marks of maths:\n");
scanf("%d",&m);
printf("enter the marks of science:\n");
scanf("%d",&s);
if(m>=95 && s>=95 && e>=95)
all++;
if(m>=90)
maths++;
if(e>=90)
english++;
if(s>=90)
science++;
}
printf("95% or above in all subject : %d \n",all);
printf("90% or above in maths :%d\n",maths);
printf("90% or above in english: %d\n",english);
printf("90% or above in science: %d\n",science);
}
我必须通过键盘输入 5 名学生的分数,但出现以下我不明白的错误。 为什么我会收到这种错误?
gcc studentMarks.c -o studentMarks.out
studentMarks.c: In function ‘main’:
studentMarks.c:24:17: warning: ' ' flag used with ‘%o’ gnu_printf format [-Wformat=]
printf("95% or above in all subject : %d \n",all);
^
studentMarks.c:24:44: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat=]
printf("95% or above in all subject : %d \n",all);
~^
studentMarks.c:25:17: warning: ' ' flag used with ‘%o’ gnu_printf format [-Wformat=]
printf("90% or above in maths :%d\n",maths);
^
studentMarks.c:25:37: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat=]
printf("90% or above in maths :%d\n",maths);
~^
studentMarks.c:26:17: warning: ' ' flag used with ‘%o’ gnu_printf format [-Wformat=]
printf("90% or above in english: %d\n",english);
^
studentMarks.c:26:39: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat=]
printf("90% or above in english: %d\n",english);
~^
studentMarks.c:27:17: warning: ' ' flag used with ‘%o’ gnu_printf format [-Wformat=]
printf("90% or above in science: %d\n",science);
^
studentMarks.c:27:39: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat=]
printf("90% or above in science: %d\n",science);
~^
在 C 编程中 %o 表示八进制值。 因此,当您写入95%或将其读取为%o 时。 由于 % 和 o 之间有一个空格,C 编译器不会将其识别为八进制或百分比,这就是它发出警告的原因。 但是,如果用 95%% 替换 95%,那么 c 编译器会将其读取为 95%。
#include<stdio.h>
int main()
{
int i,m,maths=0,english=0,e,science=0,s,all=0;
for(i=1;i<=5;i++)
{
printf("enter the marks of english:\n");
scanf("%d",&e);
printf("enter the marks of maths:\n");
scanf("%d",&m);
printf("enter the marks of science:\n");
scanf("%d",&s);
if(m>=95 && s>=95 && e>=95)
all++;
if(m>=90)
maths++;
if(e>=90)
english++;
if(s>=90)
science++;
}
printf("95%% or above in all subject : %d \n",all);
printf("90%% or above in maths :%d\n",maths);
printf("90%% or above in english: %d\n",english);
printf("90%% or above in science: %d\n",science);
}
这现在应该可以工作了。
对于每一行,从第 24 行到第 27 行,编译器都会发出两个警告(不是您指出的错误)来帮助您解决问题。
第一个是当您的编译器遇到% o
来自较长的子字符串95% or
.
编译器和printf
函数将% o
解释为带有空白标志的%o
,以允许在带符号数字类型为负时发出-
。
第二个警告是由于第一个解释以及您在格式字符串后仅包含一个参数而引起的。 如果您不小心在格式字符串后提供了两个有符号整数参数,那么您就不会看到任何警告。
如果您不顾警告而尝试按原样执行代码,那么您将获得未定义的行为。
任何时候你想在你的格式字符串中包含一个%
并且你想从字面上发出它,那么你必须将它编码为%%
。
顺便说一句,与您的问题无关,您提供给gcc
-o
选项的值是不寻常的。 通常人们会调用输出可执行studentMarks
或studentmarks
,不studentMarks.out
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.