外國(guó)人做外貿(mào)都會(huì)瀏覽哪些網(wǎng)站焊工培訓(xùn)內(nèi)容有哪些
描述
分兩次從控制臺(tái)接收用戶的兩個(gè)輸入:第一個(gè)內(nèi)容為“人名”,第一個(gè)內(nèi)容為“心里
話”。
然后將這兩個(gè)輸入內(nèi)容組成如下句型并輸出出來(lái):
1.(人名),I want to say,(心里話
2.
輸入輸出示例:
輸入:Kim
You are beautiful!
輸出:
Kim,I want to say,You are beautiful!
(答案在文末,有兩種答案)
錯(cuò)誤演示:
#include <stdio.h>int main() {char name[100];char thoughts[100];// 從控制臺(tái)接收第一個(gè)輸入printf("請(qǐng)輸入人名:");scanf("%s", name);// 從控制臺(tái)接收第二個(gè)輸入printf("請(qǐng)輸入心里話:");scanf("%s", thoughts);// 組成句子并輸出printf("%s, I want to say, %s\n", name, thoughts);return 0;
}
?
程序輸出的是 "Kim, I want to say, You",而沒(méi)有輸出完整的句子 "Kim, I want to say, You are beautiful!",可能是因?yàn)檩斎氲男睦镌捥L(zhǎng),超出了 scanf 函數(shù)讀取字符串的默認(rèn)長(zhǎng)度。此時(shí)可以使用指定最大長(zhǎng)度的方式來(lái)接收輸入。
修改 C 語(yǔ)言代碼如下:
#include <stdio.h>int main() {char name[20];char thoughts[50];// 從控制臺(tái)接收第一個(gè)輸入printf("請(qǐng)輸入人名:");scanf("%s", name);// 從控制臺(tái)接收第二個(gè)輸入printf("請(qǐng)輸入心里話:");scanf("%49[^\n]", thoughts); // 指定最大長(zhǎng)度為49,并忽略換行符// 組成句子并輸出printf("%s, I want to say, %s\n", name, thoughts);return 0;
}
?
如果在輸入心里話時(shí)出現(xiàn) "Kim, I want to say, € @報(bào)錯(cuò)" 這樣的輸出,那么很可能是在輸入時(shí)發(fā)生了中文編碼問(wèn)題??梢試L試以下方法解決:
編輯器設(shè)置:打開(kāi)代碼文件,查看編輯器的文字編碼設(shè)置,將其設(shè)置為 UTF-8 編碼(或者 GBK 編碼,具體需要根據(jù)本地環(huán)境和輸入內(nèi)容來(lái)選擇),再保存代碼文件。
輸出調(diào)試:在 C 語(yǔ)言程序中加入一些輸出語(yǔ)句,以便查看程序的執(zhí)行情況,比如:
? ?printf("輸入的心里話是:%s\n", thoughts); ? // 輸出調(diào)試信息
?這里的將其設(shè)置為 UTF-8 編碼(或者 GBK 編碼,具體需要根據(jù)本地環(huán)境和輸入內(nèi)容來(lái)選擇),再保存代碼文件,可以自行琢磨,不繼續(xù)了,下面換方法思路了
方法一:使用 fgets 函數(shù)來(lái)接收用戶輸入
所以最終改出來(lái)的代碼為:
#include <stdio.h>
#include <string.h>int main() {char name[20];char thoughts[50];// 從控制臺(tái)接收第一個(gè)輸入printf("請(qǐng)輸入人名:");fgets(name, sizeof(name), stdin);name[strcspn(name, "\n")] = '\0'; // 去除換行符// 從控制臺(tái)接收第二個(gè)輸入printf("請(qǐng)輸入心里話:");fgets(thoughts, sizeof(thoughts), stdin);thoughts[strcspn(thoughts, "\n")] = '\0'; // 去除換行符// 組成句子并輸出printf("%s, I want to say, %s\n", name, thoughts);return 0;
}
?
方法二:使用 gets 函數(shù)
#include <stdio.h>
#include <string.h>int main() {char str1[20], str2[20];printf("請(qǐng)輸入人名:");gets(str1);printf("請(qǐng)輸入心里話:");gets(str2);printf("%s, I want to say, %s\n", str1, str2);return 0;
}
?
使用 gets 函數(shù)來(lái)讀取輸入。gets 函數(shù)在讀取一行輸入時(shí)不會(huì)將換行符作為輸入的一部分,因此不需要去除換行符。接下來(lái),使用 printf 函數(shù)輸出組合好的字符串。
雖然 gets 函數(shù)比 fgets 函數(shù)用起來(lái)更方便,但由于 gets 函數(shù)不能限制輸入的長(zhǎng)度,容易發(fā)生緩沖區(qū)溢出,造成系統(tǒng)安全漏洞,所以在實(shí)際開(kāi)發(fā)中建議使用 fgets 函數(shù),并在讀取用戶輸入前檢查輸入字符的長(zhǎng)度。