網域名稱俱樂部

網域名稱俱樂部 (https://www.domainclub.org/index.php)
-   一般軟體與網路使用討論 (https://www.domainclub.org/forumdisplay.php?f=43)
-   -   C語言的指標問題請教 (https://www.domainclub.org/showthread.php?t=36636)

哈啦 2014-05-27 04:49 PM

C語言的指標問題請教
 
題目是,輸入一句英文,然後用指標的方法去寫,將全句分別改成全大寫和全小寫。

寫法如下:
引用:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
char str[80];
char *p;

printf("enter a sentence:\n");
gets(str);
p=str;

while(*p)
{
*p=toupper(*p);
p++;
}

printf("%s\n",str);

p=str;/*reset p */
while(*p)
{
*p=tolower(*p);
p++;
}
printf("%s\n",str);
return 0;
}
我有二點疑問請教一下先進:
一是條件判斷的while(*p),我知道這表示如果*p為真,亦即*p不是0的話,該式就繼續下去。但字串陣列最後一個應是null,它的值就是0嗎?其他地方的值不會有0嗎?

二是第二個的p=str;/*reset p */,註解說是要reset p,為什麼要reset呢?我試過不reset p,直接用上面已經toupper(*p)之後直接 tolower(*p),結果確實就不印出小寫,而還是和上面一樣全部大寫。

可是根據我目前的想法,既然toupper() tolower()函式都是把字母變大寫或小寫,那麼假設這一句英文 Hello, World. 經過 toupper會變成 HELLO,WORLD.,然後我再直接把它 tolower(),應該也就變成 hello,world.,不是嗎?

thanks

yumi 2014-05-27 10:31 PM

一、while(*p) 是判断字串是否到结束了,如果没有结束,就为真;若结束了,就为假。
二、如果不重置p=str的话,那么下面的while(*p)就是假的,根本进不了,也无法调用*p=tolower(*p)了。

哈啦 2014-05-27 10:39 PM

引用:

作者: yumi (文章 192131)
一、while(*p) 是判断字串是否到结束了,如果没有结束,就为真;若结束了,就为假。
二、如果不重置p=str的话,那么下面的while(*p)就是假的,根本进不了,也无法调用*p=tolower(*p)了。

many thanks, 本來還想不太通,後來想得有點通了。

就是說,第一個while(*p)之後p++一直跑到盡頭了,此時如果再來一個while(*p)就等於是承接了剛才已跑到頭的p++的結果,自然就不會再跑一次。所以要再重置一次p=str。是這樣吧?

十分感謝。:bow

robowang 2014-05-28 12:50 AM

C 語言的指標, 常讓初學者摸不著頭緒, 或似懂非懂
C 語言本身也是較低階的語言, 其實不是很適合初學者, 特別是年長的初學者~cici
我覺得如果要學程式設計, 或許可以考慮選擇別種高階語言來入門, 如 VB 或 Pascal 等等,
這樣比較容易, 也比較會有成就感

哈啦 2014-05-28 01:03 AM

引用:

作者: robowang (文章 192136)
C 語言本身也是較低階的語言, 其實不是很適合初學者, 特別是年長的初學者~cici
我覺得如果要學程式設計, 或許可以考慮選擇別種高階語言來入門, 如 VB 或 Pascal 等等,
這樣比較容易, 也比較會有成就感

?:teeth

我本來就是要練習腦力不要太早老年痴呆的,所以沒有學習時間上的壓力,反正學一點是一點。對中老人來說,其實這些語言都不簡單學。:XD:

哈啦 2014-06-11 04:33 PM

這個問題還有新的疑問請教一下。
引用:

#include <stdio.h>
#include <ctype.h>

int main(void)
{
char str[80],*p;
printf("enter a sentence:\n");
gets(str);
p=str;

while(*p)
{
*p=toupper(*p);
p++;
}
printf("%s\n",str);

return 0;
}
請問為何p=str和p=&str有何不同呢?我改成p=&str之後,程式得到的結果是一樣的。
再者下面,p++,我改成*p++,得出來的答案也是相同的。
而我個人目前的理解是,p=&str以及下面的*p++比較合乎所學的規則,只是不知答案雖一樣,但是否隱含什麼不可知的錯誤呢?

thanks


所有時間均為 +8。現在的時間是 04:47 PM

Powered by vBulletin® 版本 3.8.4
版權所有 ©2000 - 2024,Jelsoft Enterprises Ltd.