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