A. 新手。。C/C++输出出现一串问号
近期研究设计模式,在程序输出时心血来潮用了c版本的printf,结果就蛋疼了,一直输出是乱码,
strings="中国";
printf("%s",s);//输出乱码
果断切换成c++版本的cout发现可以正常输出。于是上网找答案,居然惊讶的发现printf输出字符串是针对char*的,换言之,printf只能输出c语言中的内置数据,string不是c语言内置数据。
更深入的来说:s这个string类型的对象并非单单只有字符串,其内还有许多用于操作的函数,于是&s并非字符串“中国”的首地址,而是s这个对象的首地址。
所以要做如下操作:
strings="中国";
printf("%s",s.c_str());//string中c_str()成员方法返回当前字符串的首字符地址
或cout<<s;//string中重载了“<<”操作符
B. C语言这个代码运行结果为什么是问号
倘若楼主是想实现大小写转换的的话,你小写字母应该是a-32,因为小写字母的ASCII码值大。而?也有ASCII码值,是63,你可以去刻意控制输入的值,先心中猜想,在对照看看
C. C语言打印莫名问号
原因是你的下标出了问题(以下都以输入kan为例)
我首先做的是在reverse前面用strlen把line的长度打印出来,结果当输入kan的时候,打印出来的长度是5,你期望的应该是4吧,前3个是kan,最后一个换行。你希望getline返回4,于是在reverse中减去2,正好指向kan的最后一个字符。这是对的,问题在getline中。
getline中:for跳出是因为循环条件不满足,但是在判断条件之前,for循环的++i还是会做的。所以当for循环跳出后,i指向的已经是数组的下一个位置了,这个位置的字符是没有字符的,而你后来又对i加了一次,加完以后再用换行符赋值,于是在\n和kan的n之间就多了一个你不知道是什么东西的字符。而你在赋值\0的时候没有用i++,而只是i+1,这使得i的值如你预期的返回了4,从而使那个多于的字符没有参与到reverse过程中,所以当你打印reverse后的字符串时,那么多个的字符就紧跟着kan被打印出来了(其实因为getline的问题,就算不做reverse打印line也是会跟着一个莫名其妙的字符的)
把getline中for以后的部分改成如下:
if(c
==
'\n')
{
//i++;
line[i]
=
'\n';
++i;
}
line[i]
=
'\0';
return
i;
另外,一次操作后对数组置\0也是不必的,因为在getline中把结尾标记好就够了~
D. C语言 输出 问号
空格的原因是printf("the reverse line is:\n %s", rev);这句里面有一个空格(你的格式是换行后空格输出 所以有一个空格)
至于烫的原因 是
for (i = 0; i <= len; ++i)
rev[len - i] = ori[i - 1];
是当i=0的时候引用了ori[-1]是位置的内存,所以出现的
改为
for (i = 1; i <= len; ++i)
rev[len - i] = ori[i - 1];
就行了
ps:你用的是Windows编译器 谢谢采纳
E. C语言中,问号表示什么意思
?用来判断条件的真假,:用来根据判断结果决定取值。
如(a<b)?a:b"是一个"条件表达式",如果a<b为真,则表达式取a值,否则取b值。条件运算符由"?"和":"两个符号组成, 要求有3个操作对象,所以条件运算符也叫三目运算符。
条件表达式的一般形式为:表达式1?表达式2:表达式3
C语言的基本构成:
1、数据类型
C的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。
2、常量与变量
常量其值不可改变,符号常量名通常用大写。
变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。
F. C语言运行结果后面怎么多了一个问号如何去掉菜鸟求助……
你的最后一行 printf("%c\n",X);应该是只有0~100时才可以输出对应的字符X。但是你把它放在if语句的后面,那么不论你输入什么数值,都要输出X,但是当输入数值小于0或者大于100时,X是没有被赋值的。你应该把这条语句放在前面的4个对X赋值的语句之后。
G. C语言打印莫名问号
原因是你的下标出了问题(以下都以输入kan为例)
我首先做的是在reverse前面用strlen把line的长度打印出来,结果当输入kan的时候,打印出来的长度是5,你期望的应该是4吧,前3个是kan,最后一个换行。你希望getline返回4,于是在reverse中减去2,正好指向kan的最后一个字符。这是对的,问题在getline中。
getline中:for跳出是因为循环条件不满足,但是在判断条件之前,for循环的++i还是会做的。所以当for循环跳出后,i指向的已经是数组的下一个位置了,这个位置的字符是没有字符的,而你后来又对i加了一次,加完以后再用换行符赋值,于是在\n和kan的n之间就多了一个你不知道是什么东西的字符。而你在赋值\0的时候没有用i++,而只是i+1,这使得i的值如你预期的返回了4,从而使那个多于的字符没有参与到reverse过程中,所以当你打印reverse后的字符串时,那么多个的字符就紧跟着kan被打印出来了(其实因为getline的问题,就算不做reverse打印line也是会跟着一个莫名其妙的字符的)
把getline中for以后的部分改成如下:
if(c == '\n')
{
//i++;
line[i] = '\n';
++i;
}
line[i] = '\0';
return i;
另外,一次操作后对数组置\0也是不必的,因为在getline中把结尾标记好就够了~
H. c语言字母大小写转换运行时总是转换结果后自动带个问号,怎么回事
给出你的代码,然后帮你解决
你试一下如下代码:
#include <stdio.h>
int main()
{
char ch;
ch=getchar();
if ( ch >='A' && ch<='Z' )
printf("%c\n", ch+'a'-'A' );
else
printf("%c\n", ch );
return 0;
}
I. c语言这个程序怎么输出结果是一个问号,这是个连接字符串程序 #include "stdafx.h"
还有个问题是:mystrcat最后return s;
但是这个s已经不是指定字符串的开始了。换句话说,你成功的连接了字符串,但是你返回的是这字符串之后的地址空间。
char *mystrcat(char *s,char *ct) //字符串连接
{
char * const ret = s;
while(*(s++));
s--;
while(*ct)
*(s++) = *(ct++);
return ret;
}
J. C语言运算符中问号是什么意思
问号是条件运算符的意思,跟冒号组合使用。条件运算符优先级高于赋值、逗号运算符,低于其他运算符。
表达式为:表达式1?表达式2:表达式3。先求解表达式1,若其值为真(非0)则将表达式2的值作为整个表达式的取值,否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。
(10)c语言结果是问号扩展阅读
条件运算符具有右结合性
当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。如果在问号和冒号之间还有一个问号或者冒号,应该满足就近配对,使结构不发生紊乱。
例如:
w<x ? x+w : x<y ? x : y与 w<x ? x+w : ( x<y ? x : y) 等价。
w<x ? x+w : x<y ? x : y与 (w<x ? x+w : x<y) ? x : y 不等价。