c語言 刪除非法字元

提供思路:
1、使用strtok函數,進行切割,將符合規定的字元全部刪除,然後使用strcat進行連接
2、不使用系統函數,使用循環遍歷並且標記,標記完後將數組賦值到另一個數組里邊,標記的位置直接跳過

㈡ C語言編譯過重中出現的 非法字元,可我怎麼也找不出 ,請問這非法字元可能是什麼

fun1里

int fun1(int year,int month,int day) /*查詢某年某月某日星期幾*/
{ int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int s,c=0,i;
if( fun2(year)==rn) /*判斷某年是否閏年*/
a[2]=29;
for(i=1; i<=12; i++ ) /*計算 1月至某月的前一個月的天數*/
c=c+a[i-1];
c=c+dd; /*再加上某月當月的實際天數*/
s=year-1+(year-1)/4-(year-1)/100+(year-1)/400+c;
return s%7;
}

這一句
s=year-1+(year-1)/4-(year-1)/100+(year-1)/400+c;

第三個減號是全形的,替換成下面這行試試
s=year-1+(year-1)/4-(year-1)/100+(year-1)/400+c;

祝你好運^_^

㈢ 這段C語言程序中一直提示有非法字元怎麼辦,我找不出來啊

for(k=0;k<n;k++){p=(struct btnode*)malloc(sizeof(struct btnode));p->d=a[k];p->lchild=NULL;p->rchild=NULL;q=bt;if(q==NULL) bt=p;else {while((q->lchild)!=p)&&(q->rchild)!=p)){if(a[k]<q->d){if(q->lchild!=NULL) q=q->lchild;else q->lchild=p;}else{if(q->rchild)!=NULL) q=q->rchild;else q->rchild=p;}}}}return bt;}
都是內的容

㈣ 2. 是非法的C語言轉義字元。 A) 』\b』 B) 』\0xf』 C.'037'D'\"

A \b本身是轉義字元 正確.
B 如果要16進制, 需要寫成 '\xf' 字元轉義的時候不需要寫0x的.
C '\037'才對專, 這種是8進制屬轉義.
D 這里應該不是雙引號 而是'\'' 即 兩個單引號包含的一個\' 表示單引號轉義.
如果不是你打錯了話, 那麼BC都是錯的.

㈤ C程序非法字元問題

#include "stdio.h"
#define NULL 0

#define SS sizeof(struct stu)
typedef struct stu
{ int num;
int name[10];
struct stu *llink,*rlink;
}ss;
ss *list()
{ ss *h,*r,*s;
int i;int n=5;
if((h=(ss *)malloc(SS))==NULL)
{ printf("wrogn !");
}
h->num=NULL;
h->llink=NULL;
h->rlink=NULL;
h->name[0]='\0';
r=h;
for(i=0;i<n;i++)
{ s=(ss *)malloc(SS);
r->rlink=s;
printf("inter :\n");
scanf("%d%s",&s->num,&s->name);
s->llink=r;
s->rlink=NULL;
r=s;
}
h->llink=r;////////////////////
r->rlink=h;////////////////
return h;
}

void input(ss *head)
{ ss *p;
p=head->rlink;
if(p!=head)///////
do******
{ printf("%2d%4s\n",p->num,p->name);
p=p->rlink;
}while(p!=head);//////////
}
main()
{ ss *head;
head=list();
printf("\n ht put is :\n");
input(head);
getch();
}
你是建立的一個循環鏈表啊,不是一個單鏈表,為什麼還要用NULL?多注意一些邏輯上的錯誤,再就是,非法字元,其實最好是在剪貼然後再txt中粘貼一下,在從其上復制,再粘貼到win tc就行了,一般再就是把上下行重復輸入一遍就行了,

㈥ C語言編程問題,求高手解答遇到輸入非法字元時,怎麼處理。

#include<stdio.h>
#include<time.h>
#include <stdlib.h>
#include "regex.h"

const int MAX_LEN = 1000;
/*去掉字元串兩端的空格*/
char * trimString(char guessString[])
{
int head = 0 ,rear = strlen(guessString)-1;
char result[MAX_LEN];
int i,k;
/*開頭空格*/
while( guessString[head] != '\0' &&
(guessString[head] == ' ' || guessString[head] == ' ' )
)
{
head ++;
}

/*尾部空格*/
while( rear >= 0 &&
(guessString[rear] == ' ' || guessString[rear] == ' ' )
)
{
rear --;
}
for(i = head ,k = 0; i <= rear ; i++ , k++)
{
result[k] = guessString[i];
}
result[k] = '\0';

return result;
}

/*
提取字元串中的【正整數】。
如果是恰好包含【一個正整數】的字元串(正數前後可以有任意個空格,正數可以有多餘的前導0),則返回這個正數;
如果是一個空串,則返回 -1
如果包含非數字字元,則返回-2
*/
int transStringToNum(char guessString[])
{
int i;
int head = 0 ,rear = strlen(guessString)-1;
char trimGuessString[MAX_LEN];
int num = 0;
// 去前後空格
strcpy(trimGuessString,trimString(guessString));
// 檢查是否空串
if( 0== strlen(trimGuessString) )
{
return -1;
}
// 檢查是否有非數字字元
for(i = 0 ; trimGuessString[i] != '\0' ; i ++)
{
if(trimGuessString[i] < '0' || trimGuessString[i] > '9')
{
return -2;
}
}
// 字元串轉換成數字
for(i = 0 ,num = 0 ; trimGuessString[i] != '\0' ; i++)
{
num = num * 10 + (trimGuessString[i] - '0');
}
return num;
}

int main()
{
int num,guessNum,n,count=0;
char guessString[MAX_LEN];
char reply;
srand(time(NULL));
do
{
//產生一個隨即數
num=rand()%100+1;

printf("你有10次機會,請猜數字並按回車。\n");
for(n=1;n<=10;n++)
{

// 以字元串形式讀入一個整數
gets(guessString);

/*
調用函數 transStringToNum 進行有效性驗證
當返回值 guessNum 是負數時,
字元串 guessString 中沒有合法的正數
*/
guessNum = transStringToNum(guessString);
if(guessNum == -1 )
{
printf("請輸入一個數字(必須是在1-100 之間)!\n");
n--;
continue;
}

if(guessNum == -2 )
{
printf("輸入的不是一個合法數字(必須是在1-100 之間)!\n");
n--;
continue;
}

if(guessNum>num)
{
printf("It's too high!\n");
}
else if(guessNum<num)
{
printf("It's too low!\n");
}
/*
這里有誤,是 == 而不是 =
因為你剛好把這個分支放在最後,因此察覺不到錯誤
如果你寫成
if(guessNum = num) else if(guessNum>num) else if(guessNum<num)
就知道錯了。這時if(guessNum = num)永遠都會被執行
因為這是一個【賦值語句】而不是【邏輯語句】,且 num 的值是恆正的
*/
else if(guessNum == num)
{
printf("You are right!\n");
printf("你共用了%d次機會猜對數字。\n",n);
break;
}
}

printf("Do you want to continue(Y/N or y/n)?");
/*
用 getch() 取代scanf ,不易出錯
因為 getch()只能輸入一個字元
而 scanf 可以讀入多個字元,而且要回車
*/
fflush(stdin);
reply = getch();

}while((toupper(reply)=='Y'));
printf("The game is over!\n");
return 0;
}
/*
輸入合法數字示例(數字包含在一對""中):
"123"
" 123"
"123 "
" 123 "
" 0000123 "

上面的結果都是輸入正數: 123
*/

㈦ c語言中非法字元有哪些

首先看定義,用單引號括起來的單個字元,或用雙引號括起來的一串字元即字元常量內。
C '&' 是用單引號括起來容的單個字元,正確。
A '\xff' B '\65' D'\028' 是用單引號括起來的多個字元,但因它們前面都 有一個轉義符 『\『 ,就不能說它們都不符合定義,都不合法的。

A '\xff' 中 '\x' 組合表示是一個十六進制數 ffH = 10 進制的 255 ,它代表一個不可見字元的ASCII 碼, 合法 。

B '\65' 同理 '\' + 三個十進制數 '\ddd' 表示的是 八進制數。'\65' = '\065' = 10 進制的 53, 是 『F』 的ASCII 碼表示。單 字,合法。

D '\028' 同上表示是八進制數,但八進制數中逢八則進一,是不會出現 8 的,所以格式雖對但數值錯了。不合法。

㈧ 求一個在c語言中提示輸入非法字元程序

|

#include<stdio.h>
voidmain(void)
{
charch;
printf("請輸入復一個字制符:");
scanf("%c",&ch);
if(ch>'A'&&ch<'Z'||ch>'a'&&ch<'z')
{
printf("");

}else
printf("非法字元!");
}

㈨ 關於C語言控制非法字元和scanf緩存的問題

scanf("%d %d",&num[k],&score[k]);
if(scanf("%d",&score[k])!=1)

你這一句scanf("%d %d",&num[k],&score[k]);已經讀入成績了,就算輸入錯誤也不能做出處理。
你下面再加一個if(scanf("%d",&score[k])!=1),這會使score[k]讀入一個新值,即score[k]被讀入了兩次,你也被要求輸入兩次。
你要明白:scanf("%d",&score[k])!=1這個語句作為判斷條件有兩個功能,一是讀入一個值並把值賦給score[k],二是判斷是否成功讀入了一個值,如果是,你這個條件就為假。

㈩ C語言中,出現非法字元時會發出錯誤對嗎

是的,會編譯不通過,而且報的錯誤千奇百怪。

最常見的就是中文字元了。

合法字元見ascii碼表。