当前位置:首页 » 编程语言 » c语言结果是问号
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言结果是问号

发布时间: 2022-11-04 06:19:43

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 不等价。