1樓:匿名使用者
for (i=0;i<26;i++)
{for (j=0;j<26-i-1;j++) //這裡改一下先
c語言,字串輸出是亂碼
2樓:圈圈叉叉叉叉圈
字串使用前請使用清空語句把垃圾記憶體清理成'\0',也就是0x00(0):
memset(str2, 0x00, sizeof(str2));
當然,也可以在宣告的時候進行初始化:
char str2[20] = ;
這句也能實現同樣的效果。這是c語言習慣,務必養成!
'\0'是字串結束符,每當直譯器看到這'\0'才會認為字串終止,而你的程式明顯沒有字串結束符,所以連同垃圾記憶體一起讀出來了。「燙燙。。」等就是垃圾記憶體。
不明白歡迎追問
3樓:
struct s p[4];只是宣告了乙個名為p的struct s型陣列,還沒有為其賦值,裡面全是機器垃圾,你就用for(i=0;...)printf...輸出,能得到正常資料嗎?
都是垃圾,當然是亂碼!另:全域性陣列p的中是4,=右邊卻用5個元素初始化,越界了!!
4樓:自戀狂
你幾個地方寫錯了,我在裡面有註釋,分別有:
1、賦值地方,應該是a[i][j],這裡i、j代表第幾個,你用student這些固定值,一看就知道錯了不是嗎?而且這是個非常嚴重的錯誤,a[i][j]這裡面i不能等於student,j不能等於subiects,你們下標取值0到student-1,你自己寫完看看都知道錯了
2、sum每次迴圈前要賦0,否則會把前乙個學生的成績加進去
3、ave=sum*1.0/4,不乘1.0的話,系統會把sum/4當成乙個整型,會造成結果不正確
#include
#define subiects 3 //學科數量
#define students 4 //學生人數
int main(void)
;int i = 0, j = 0, sum = 0;//sum為總分
double ave;//ave為平均值
//輸入成績
for (i = 0; i < students; i++)
}//輸出成績
printf("\t\tc語言\t大英\t高數\t總分\t平均分\n");
for (i = 0; i < students; i++)
ave = sum*1.0 / subiects;
printf("\t%d\t%.2f\n",sum,ave);
}printf("\n\n");
//顛倒輸出
sum = 0;
ave = 0;
printf("\t");
for (i = 0; i < students; i++)
printf("\t同學%d", i + 1);
printf("\t平均分\n");
for (j = 0; j < subiects; j++)
ave = sum*1.0 / students;
printf("\t%.2f\n",ave);
}return 0;}
5樓:匿名使用者
主要錯誤有三個,第一:後面所有的a[students][subiects]變成a[i][j]
在計算每個同學的總分和平均分的時候要將sum的初值設定為0吧
在計算平均分的時候,你的語句是ave = sum / students;ave = sum / subiects
這個是不對的,應改為,ave =1.0* sum / students,ave =1.0* sum / subiects原因在於 假設sum=7,students=3,則ave=7/3=2,而實際想要的結果為2.
3333
#include
#define subiects 3 //學科數量
#define students 4 //學生人數
int main(void)
;int i = 0, j = 0, sum = 0;//sum為總分
double ave;//ave為平均值
//輸入成績
for (i = 0; i < students; i++)
}//輸出成績
printf("\t\tc語言\t大英\t高數\t總分\t平均分\n");
for (i = 0; i < students; i++)
ave = 1.0*sum / subiects;
printf("\t%d\t%.2f\n",sum,ave);
}printf("\n\n");
//顛倒輸出
sum = 0;
ave = 0;
printf("\t");
for (i = 0; i < students; i++)
printf("\t同學%d", i + 1);
printf("\t平均分\n");
for (j = 0; j < subiects; j++)
ave = 1.0*sum / students;
printf("\t%.2f\n",ave);
}return 0;}
6樓:
#include
#include
#include
int random(int num);
void main()
printf("請依次輸入學生姓名:");
for(i=0;i被點到的同學的名字是:");
printf("%s ",p[random(n-1)]);
}int random(int num)
7樓:匿名使用者
你好沒有亂碼
就是邏輯上有些錯誤如圖:
8樓:匿名使用者
按照程式是在a字元
串中隔乙個字元取乙個形成b字串
void main()
half(a);
}輸出24680bdfhj
如果出亂碼,可能你的a陣列賦值方面有問題,不知道你是如何定義a陣列和呼叫函式的
9樓:匿名使用者
輸出亂碼是必須的,
因為你的資料型別搞錯了,
你使用的是字元函式stringcopy()來拷貝字元;
那麼要處理的資料當是char型別,
然而你所定義的指標應當也是char型別;
你應當修改的地方是
int *str1,*str2;//請將int改為char
10樓:匿名使用者
沒什麼問題,第乙個for迴圈後多了乙個分號;只要保證你傳入該函式的陣列a中有準確的二十個字元就行,如:char a=;
11樓:
while(1)
else }
12樓:匿名使用者
把讀迴圈改為 : while(fgets(str,120,fp) != null) printf("%s\n",str);
這樣就不需要直接檢查檔案是否結束,這是因為fgets()函式在讀滿120個字元或遇到'\n'時,就返回str的首址。在讀檔案時,測試是否到檔案結束經常出錯,我看見高手們都很少使用feof();函式,原因大概在此吧!
13樓:匿名使用者
原因向他們說的那樣, char a是乙個區域性變數, 函式返回後他在棧上的空間就自動釋放了...
可以這樣改下:
#include
#include
#include
#include
using namespace std;
#define max_len 10
char* getnick()
return a;
}void main()
14樓:匿名使用者
getnick函式內的陣列a是區域性陣列,在棧上分配空間``,當getnick執行完後,棧空間會被**
可把a定義為全域性變數或動態申請空間(在堆中分配空間)
15樓:匿名使用者
getnick 返回的a,是乙個區域性變數,當getnick返回後,這個變數就無效了,這個變數所指記憶體中的內容變得不可**,列印出來的當然不行了。你要麼把 a 宣告在函式外面,作乙個全域性變數,要麼在getnick裡
static char a = ....;
16樓:匿名使用者
你的 str2 沒有加結束字元
加上 str2[n] = '\0';
就能濾掉後面的亂碼了
17樓:匿名使用者
if( !(file = fopen(name, "wb")))
你是以二進位制的方式開啟檔案的,用「w+」吧: fopen(name, "w+")
18樓:匿名使用者
#include
int main()
str2[n]='\0';
}puts(str2);
putchar('\n');
return 0;
}就是 str2 的結束加上結束符『\0』
19樓:郭城仉嘉容
intm[i];
改成int
m[i]=;
試下因為m字串有可能沒有初始化,最後沒有終結符,造成最後幾個字元隨機記憶體值亂碼。
c語言 字串輸出時最後出現亂碼
20樓:匿名使用者
輸出出現亂碼就是因為字串結尾並沒有結尾符'\0'。
gets函式讀入一行字串時,會在最末尾自動加上'\0'結尾。但是你在for迴圈內將s2的字元乙個個拷貝到s中的時候,迴圈限定條件只到了s2字串的'\0'結尾符之前,所以輸出亂碼了。
將迴圈條件k
21樓:匿名使用者 #include #include int main() { int a,b,k; char s1[1000],s2[1000],ex; gets(s1); gets(s2); a=strlen(s1); b=strlen(s2);//計算字串長度//char s[a+b+1]; memcpy(s,s1,a);//把s1放入s中//for(k=a;k c語言 字串輸出時最後出現乙個亂碼 **等 22樓:一粟滄海 是你的for (i = 0; i <= len; i++),多輸出了乙個字元,改成for (i = 0; i < len; i++)即可,記住c中陣列都是從0開始數的。 23樓:匿名使用者 for (i = 0; i <= len; i++) 兩個這個地方都要寫成 < 不能等於 24樓:鑄信 修改這裡:len = strlen(cs)-1; 25樓:利芳懿邶豆 因為你的字串陣列錯誤的引用了存在髒資料的記憶體要避免,就要初始化陣列 memset(str,0,n) 將str字串中前n個位元組替換為0並返回str; str為你定義的字串,n為字串容量,並非長度,即chara[20],不管你有幾個字元,n為20為佳加上標頭檔案string.h ****華夏聯盟,親 c語言列印字串亂碼,應該怎麼辦? 26樓:匿名使用者 1、字串陣列各字元單個賦值的話,在每串最後乙個字元之後新增 '\0',表示串結束了,輸入時就沒有多餘的亂碼了,因為gets()或scanf() 的%s都是主動在串結束後新增了 '\0'的。 2、字串使用前請使用清空語句把垃圾記憶體清理成'\0',也就是0x00(0): memset(str2, 0x00, sizeof(str2)); 當然,也可以在宣告的時候進行初始化: char str2[20] = ; 這句也能實現同樣的效果。這是c語言習慣,務必養成! '\0'是字串結束符,每當直譯器看到這'\0'才會認為字串終止,而程式明顯沒有字串結束符,所以連同垃圾記憶體一起讀出來了 0 是字串輸入的時候,系統自動加上的結束符,如 char a 10 scanf s a 輸入123回車,則a 0 1 a 1 2 a 2 3 a 3 0 也可以手工輸入,如 char b 10 b 0 a b 1 b b 2 c b 3 0 0 也可以直接用0,如 char c 10 表示陣列c中全... 第乙個問題 字串陣列的長度不包括最後的 0 第二處問題 1 把 for i 0 str1 i 0 i 後面加上乙個分號 2 把for i 0 str1 i 0 i 後面的花括號去掉 3 再把 puts str1 前面的花括號去掉就可以了 程式如下 include stdio.h int main c... mark 這個分析了下還挺複雜 想想先 這樣子話幾乎是沒有辦法實現的。因為哪一些字元屬於子串是不確定的,big可能是乙個子串,igb可能是乙個子串,gba可能是乙個子串。不過當你確定你需要查的子串時,可以進行判定的。比如查詢這個字串裡有多少個 big 我這裡提供乙個思路參考。這是乙個字串 strin...c語言書上說格式字元s的功能是輸出字串
c語言字串陣列逆序問題,C語言字串陣列逆序問題
c語言,關於字串