我用下面代碼讀入n個字串,并把每個字串的第一個字母大寫,后面的都小寫。
在我輸入
2
saca(回車)
程式就直接運行了,我想不明白為什么輸入這個會出現問題,輸入其他的好像都能正確輸出。
求解答,看看代碼是有什么問題嗎??
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,N;
char a[N][100];
scanf("%d",&N);
// getchar();
for(i=0;i<N;i++)
{
scanf("%s",a[i]);
//getchar();
}
for(i=0;i<N;i++)
{
for(j=0;j<strlen(a[i]);j++)
{
if(j==0)
{
if(a[i][j]>'a')
a[i][j]=a[i][j]-32;
}
else
{
if(a[i][j]<'a')
a[i][j]=a[i][j]+32;
}
}
printf("%s\n",a[i]);
}
}
uj5u.com熱心網友回復:
首先getchar的地方要放開注釋,也就是說需要執行getchar(它的作用是清慷訓行符,否則你按回車就相當于接收2個資料,一個正確資料,一個是換行符)。就你輸入的資料,N接收2,a[0]接識訓行符(第一次for回圈),然后a[1]接收saca(第二次for回圈),for回圈就結束了,所以程式就直接運行了。其次,不要用變數定義陣列的長度,即a[N][100]改成a[100][100],想用變數來定義陣列長度就要自己申請記憶體。你的程式能正常運行,是因為a陣列越界后,記憶體沒造成沖突,你現在這樣用是不安全的。
uj5u.com熱心網友回復:
N沒有初始化而已uj5u.com熱心網友回復:
我懂了,謝謝大佬指導uj5u.com熱心網友回復:
不需要放開,用的是scanf %s不是gets或fgets,因此不需要getchar();
char a[N][100];這里的N是未知的,陣列需要確定長度,因此建議樓主N用宏定義
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/39460.html
標籤:C語言
上一篇:VC實作音樂功能
