标题:调用SetConsoleTextAttribute后为何报错
只看楼主
初学编程的人
Rank: 2
等 级:论坛游民
威 望:2
帖 子:90
专家分:84
注 册:2017-3-12
结帖率:66.67%
 问题点数:0 回复次数:13 
调用SetConsoleTextAttribute后为何报错
#include<stdio.h>
#include <windows.h>

int main (int argc, char *argv[])
{
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(h,FOREGROUND_RED|FOREGROUND_GREEN);
    char s[]="test";
    printf("character %s.\n",s);
}
提示一下错误
1>d:\learn_c\study_c\study_c\study.c(8): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>d:\learn_c\study_c\study_c\study.c(9): error C2065: “s”: 未声明的标识符

如果把 char s[]="test\n";去掉
       printf("character %s.\n",s);改成printf("character test.\n");就没问题了

同样如果直接把HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(h,FOREGROUND_RED|FOREGROUND_GREEN);
这两句注释掉也没问题,只是字体颜色不会改变。
为何会出现这样的问题
搜索更多相关主题的帖子: character include 
2017-03-21 15:49
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
编译后缀文件名是.c还是.cpp?如果是.c则试试把    char s[]="test";放到前面申明部分试试~不过写这种windows编程大都是用.cpp的吧?~~我也不知道具体情况~先试试看~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-03-21 15:54
初学编程的人
Rank: 2
等 级:论坛游民
威 望:2
帖 子:90
专家分:84
注 册:2017-3-12
得分:0 
后缀是.c
2017-03-21 15:59
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
我这没异常,可能是编译器的问题,有些编译器对一些声明定义部份要放到前面。
这样试试:
int main (int argc, char *argv[])
{
    char s[]="test";
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(h,FOREGROUND_RED|FOREGROUND_GREEN);
    printf("character %s.\n",s);
}
2017-03-21 16:02
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:0 
主函数没返回值
2017-03-21 16:02
初学编程的人
Rank: 2
等 级:论坛游民
威 望:2
帖 子:90
专家分:84
注 册:2017-3-12
得分:0 
char s[]="test";放在前面确实可以,但是用了句柄之后发生了什么?为何不能通过编译?
2017-03-21 16:03
初学编程的人
Rank: 2
等 级:论坛游民
威 望:2
帖 子:90
专家分:84
注 册:2017-3-12
得分:0 
我的是vs2010,win10系统
2017-03-21 16:04
初学编程的人
Rank: 2
等 级:论坛游民
威 望:2
帖 子:90
专家分:84
注 册:2017-3-12
得分:0 
回复 4楼 吹水佬
版主用的哪个编译器,难道编译器差别有这么大
2017-03-21 16:05
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用初学编程的人在2017-3-21 16:03:39的发言:

char s[]="test";放在前面确实可以,但是用了句柄之后发生了什么?为何不能通过编译?

应该与句柄无关。
通常的写法是先声明定义后操作,也许这是一种老习惯,有些编译器也有这种习惯。
2017-03-21 16:07
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用初学编程的人在2017-3-21 16:05:49的发言:

版主用的哪个编译器,难道编译器差别有这么大

我用GCC
2017-03-21 16:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-475328-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.328914 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved