VS2010明明已经声明了标识符,为什么一直提示未声明的标识符

ManKeung_Chan 2017-12-02 01:21:43
#include<stdio.h>
int main()
{
printf("请输入需要统计的学生人数:");
int N ,i,X;
float S;
scanf("%d",&N); //输入学生人数
char *str;
for(i=1;i<=N;i++)
{
printf("请输入学生%d的学号、姓名和该课成绩",i);
scanf("%d%s%f",&X,str,&S);
}//输入学生学号、姓名、成绩
printf("%d%s%f",X,str,S);//输出学生学号、姓名、成绩
return 0;
}



1>c:\先软件\vs2010总\program\test01\test01\ts.c(5): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>c:\先软件\vs2010总\program\test01\test01\ts.c(6): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>c:\先软件\vs2010总\program\test01\test01\ts.c(7): error C2065: “N”: 未声明的标识符
1>c:\先软件\vs2010总\program\test01\test01\ts.c(8): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>c:\先软件\vs2010总\program\test01\test01\ts.c(9): error C2065: “i”: 未声明的标识符
1>c:\先软件\vs2010总\program\test01\test01\ts.c(9): error C2065: “i”: 未声明的标识符
1>c:\先软件\vs2010总\program\test01\test01\ts.c(9): error C2065: “N”: 未声明的标识符
1>c:\先软件\vs2010总\program\test01\test01\ts.c(9): error C2065: “i”: 未声明的标识符
1>c:\先软件\vs2010总\program\test01\test01\ts.c(11): error C2065: “i”: 未声明的标识符
1>c:\先软件\vs2010总\program\test01\test01\ts.c(12): error C2065: “X”: 未声明的标识符
1>c:\先软件\vs2010总\program\test01\test01\ts.c(12): error C2065: “str”: 未声明的标识符
1>c:\先软件\vs2010总\program\test01\test01\ts.c(12): error C2065: “S”: 未声明的标识符
1>c:\先软件\vs2010总\program\test01\test01\ts.c(14): error C2065: “X”: 未声明的标识符
1>c:\先软件\vs2010总\program\test01\test01\ts.c(14): error C2065: “str”: 未声明的标识符
1>c:\先软件\vs2010总\program\test01\test01\ts.c(14): error C2065: “S”: 未声明的标识符
1>
1>生成失败。
...全文
15046 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2020-03-02
  • 打赏
  • 举报
回复 1
引用 9 楼 Intel0011 的回复:
[quote=引用 楼主 Mankhoo_Chan 的回复:]
#include<stdio.h>
int main()
{
printf("请输入需要统计的学生人数:");
int N ,i,X;
float S;
scanf("%d",&N); //输入学生人数
char *str;
for(i=1;i<=N;i++)
{
printf("请输入学生%d的学号、姓名和该课成绩",i);
scanf("%d%s%f",&X,str,&S);
}//输入学生学号、姓名、成绩
printf("%d%s%f",X,str,S);//输出学生学号、姓名、成绩
return 0;
}

VS2010的C编译器还未完全支持C99的任意位置声明变量的语法,C++中可以
所以解决办法为二种,二选一即可
1。 将所有的变量声明放在程序的最开头
int main()
{
int N ,i,X;
float S;
char str[120];

printf("请输入需要统计的学生人数:");
scanf("%d",&N); //输入学生人数

for(i=1;i<=N;i++)
{
printf("请输入学生%d的学号、姓名和该课成绩",i);
scanf("%d%s%f",&X,str,&S);
}//输入学生学号、姓名、成绩
printf("%d%s%f",X,str,S);//输出学生学号、姓名、成绩
return 0;
}

2。将你的程序改为C++模式,则不需要改动程序
另你程序中str的用法是错误的,你只声明了一个字符串指针,但未为str分配空间,改成字符数组即可[/quote]

这个说法合理
楼主的文件是c, 默认的还是按照c来编译
c99的体现很多的时候都在c++的改进上,大部分编译器对c的支持没有变化
qq_45261891 2020-03-02
  • 打赏
  • 举报
回复
我复制了你的代码,在vs中跑了一下,没有问题,是不是字符集的问题
csucxy 2019-06-02
  • 打赏
  • 举报
回复
调用scanf函数时,将一个从键盘输入的字符串写入到指针str所指向的内存空间,但又未str确定指向哪里,那程序该如何操作?
Lee丶静 2018-05-21
  • 打赏
  • 举报
回复
写函数时,先定义变量,在写你的printf 就能行了,也就是换下顺序
HomerRo 2017-12-03
  • 打赏
  • 举报
回复
char str[120]; char *pStr=str; 也可以这样声明就可以了 还要注意的是常量使用大写字母命名,变量使用小写字母,变量的命名方式最好要规范O(∩_∩)O
Intel0011 2017-12-03
  • 打赏
  • 举报
回复
引用 楼主 Mankhoo_Chan 的回复:
#include<stdio.h> int main() { printf("请输入需要统计的学生人数:"); int N ,i,X; float S; scanf("%d",&N); //输入学生人数 char *str; for(i=1;i<=N;i++) { printf("请输入学生%d的学号、姓名和该课成绩",i); scanf("%d%s%f",&X,str,&S); }//输入学生学号、姓名、成绩 printf("%d%s%f",X,str,S);//输出学生学号、姓名、成绩 return 0; }
VS2010的C编译器还未完全支持C99的任意位置声明变量的语法,C++中可以 所以解决办法为二种,二选一即可 1。 将所有的变量声明放在程序的最开头
int main()
{
        int N ,i,X;
	float S;
        char str[120];

	printf("请输入需要统计的学生人数:");
	scanf("%d",&N);  //输入学生人数

	for(i=1;i<=N;i++)
	{
		printf("请输入学生%d的学号、姓名和该课成绩",i);
		scanf("%d%s%f",&X,str,&S);
	}//输入学生学号、姓名、成绩
	printf("%d%s%f",X,str,S);//输出学生学号、姓名、成绩
	return 0;
}
2。将你的程序改为C++模式,则不需要改动程序 另你程序中str的用法是错误的,你只声明了一个字符串指针,但未为str分配空间,改成字符数组即可
  • 打赏
  • 举报
回复
引用 6 楼 srxumin 的回复:
莫着急,我帮你改成这样就能通过了 #include<stdio.h> int main() { int N, i, X; float S; char *str; printf("请输入需要统计的学生人数:"); scanf("%d", &N); //输入学生人数 for (i = 1; i <= N; i++) { printf("请输入学生%d的学号、姓名和该课成绩", i); scanf("%d%s%f", &X, str, &S); }//输入学生学号、姓名、成绩 printf("%d%s%f", X, str, S);//输出学生学号、姓名、成绩 return 0; }
相信这位大神已经帮你解决了,遇到这中问题最简单的处理方式就是先把第一个error解决了,再去看下一个,因为后面的很多错误到最后也许只是第一个error引起的。 [PS:还有就是CSDN的验证码已经无敌了。]
开心秋水 2017-12-02
  • 打赏
  • 举报
回复
把char* str改为char str[100]={0};
srxumin 2017-12-02
  • 打赏
  • 举报
回复
莫着急,我帮你改成这样就能通过了 #include<stdio.h> int main() { int N, i, X; float S; char *str; printf("请输入需要统计的学生人数:"); scanf("%d", &N); //输入学生人数 for (i = 1; i <= N; i++) { printf("请输入学生%d的学号、姓名和该课成绩", i); scanf("%d%s%f", &X, str, &S); }//输入学生学号、姓名、成绩 printf("%d%s%f", X, str, S);//输出学生学号、姓名、成绩 return 0; }
真相重于对错 2017-12-02
  • 打赏
  • 举报
回复
引用 4 楼 Mankhoo_Chan 的回复:
[quote=引用 2 楼 hdt 的回复:] char *str;
这个没错啊[/quote] 没初始化,你就想scanf????
ManKeung_Chan 2017-12-02
  • 打赏
  • 举报
回复
引用 2 楼 hdt 的回复:
char *str;
这个没错啊
ManKeung_Chan 2017-12-02
  • 打赏
  • 举报
回复
引用 1 楼 year2002 的回复:
你的标点符号是中文的吧
我的全部都是英文的,而且没有红色波浪线啊。就是不知道为什么
真相重于对错 2017-12-02
  • 打赏
  • 举报
回复
char *str;
  • 打赏
  • 举报
回复
你的标点符号是中文的吧

65,190

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧